From b2aef07dbff335db6635e1b8209aa9eea33c7e30 Mon Sep 17 00:00:00 2001 From: masaru87 <55574641+masaru87@users.noreply.github.com> Date: Fri, 31 Jul 2026 11:47:57 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20handle(=5F:)=20=E3=81=8C=E3=83=91?= =?UTF-8?q?=E3=82=B9=E3=81=AE=E7=9F=AD=E3=81=84=20URL=20=E3=81=A7=20Index?= =?UTF-8?q?=20out=20of=20range=20=E3=81=AB=E3=81=AA=E3=82=8B=E5=95=8F?= =?UTF-8?q?=E9=A1=8C=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit isAcceptableURL(url:) は pathComponents.isEmpty のみを確認していたが、 handle(_:) は pathComponents[1] と、success の場合は pathComponents[2] を 読むため、要素数が 1 または 2 の URL でクラッシュしていた。 --- Lib/StudyplusSDK/Studyplus.swift | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Lib/StudyplusSDK/Studyplus.swift b/Lib/StudyplusSDK/Studyplus.swift index d2adf0b..1a53c68 100644 --- a/Lib/StudyplusSDK/Studyplus.swift +++ b/Lib/StudyplusSDK/Studyplus.swift @@ -139,6 +139,11 @@ final public class Studyplus { switch url.pathComponents[1] { case "success": + guard url.pathComponents.count >= 3 else { + delegate?.studyplusLoginFail(error: .unknownUrl(url)) + return false + } + let accessToken: Data = url .pathComponents[2] .trimmingCharacters(in: .whitespacesAndNewlines) @@ -184,7 +189,8 @@ final public class Studyplus { guard let scheme = url.scheme else { return false } guard scheme == "studyplus-\(consumerKey)" else { return false } - if url.pathComponents.isEmpty { + // handle(_:) reads pathComponents[1], so at least 2 components are required + if url.pathComponents.count < 2 { return false }