Skip to content

Commit 7348c17

Browse files
authored
fix(amazonq): zip entry contains invalid characters (aws#5274)
* fix(amazonq): zip entry contains invalid characters * refactor
1 parent 770f2a2 commit 7348c17

File tree

4 files changed

+31
-1
lines changed

4 files changed

+31
-1
lines changed
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"type" : "bugfix",
3+
"description" : "/review: Improved success rate of code reviews for certain workspace configurations"
4+
}

plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/codescan/sessionconfig/CodeScanSessionConfig.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ import software.aws.toolkits.jetbrains.services.codewhisperer.util.CodeWhisperer
3838
import software.aws.toolkits.jetbrains.services.codewhisperer.util.CodeWhispererConstants.DEFAULT_PAYLOAD_LIMIT_IN_BYTES
3939
import software.aws.toolkits.jetbrains.services.codewhisperer.util.CodeWhispererConstants.FILE_SCAN_PAYLOAD_SIZE_LIMIT_IN_BYTES
4040
import software.aws.toolkits.jetbrains.services.codewhisperer.util.CodeWhispererConstants.FILE_SCAN_TIMEOUT_IN_SECONDS
41+
import software.aws.toolkits.jetbrains.services.codewhisperer.util.isWithin
4142
import software.aws.toolkits.resources.message
4243
import software.aws.toolkits.telemetry.CodewhispererLanguage
4344
import java.io.File
@@ -106,7 +107,7 @@ class CodeScanSessionConfig(
106107
null -> getProjectPayloadMetadata()
107108
else -> when (scope) {
108109
CodeAnalysisScope.PROJECT -> getProjectPayloadMetadata()
109-
CodeAnalysisScope.FILE -> if (selectedFile.path.startsWith(projectRoot.path)) {
110+
CodeAnalysisScope.FILE -> if (selectedFile.isWithin(projectRoot)) {
110111
getFilePayloadMetadata(selectedFile, true)
111112
} else {
112113
projectRoot = selectedFile.parent

plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/util/CodeWhispererUtil.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import com.intellij.openapi.editor.Editor
1212
import com.intellij.openapi.editor.impl.EditorImpl
1313
import com.intellij.openapi.project.Project
1414
import com.intellij.openapi.vfs.VfsUtil
15+
import com.intellij.openapi.vfs.VfsUtilCore
1516
import com.intellij.openapi.vfs.VirtualFile
1617
import com.intellij.openapi.wm.WindowManager
1718
import com.intellij.ui.ComponentUtil
@@ -152,6 +153,8 @@ fun VirtualFile.toCodeChunk(path: String): Sequence<Chunk> = sequence {
152153
}
153154
}
154155

156+
fun VirtualFile.isWithin(ancestor: VirtualFile): Boolean = VfsUtilCore.isAncestor(ancestor, this, false)
157+
155158
object CodeWhispererUtil {
156159
fun getCompletionType(completion: Completion): CodewhispererCompletionType {
157160
val content = completion.content()

plugins/amazonq/codewhisperer/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/codewhisperer/CodeWhispererUtilTest.kt

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import software.aws.toolkits.jetbrains.core.region.MockRegionProviderRule
2424
import software.aws.toolkits.jetbrains.services.codewhisperer.util.CodeWhispererUtil.getCompletionType
2525
import software.aws.toolkits.jetbrains.services.codewhisperer.util.CodeWhispererUtil.getTelemetryOptOutPreference
2626
import software.aws.toolkits.jetbrains.services.codewhisperer.util.CodeWhispererUtil.getUnmodifiedAcceptedCharsCount
27+
import software.aws.toolkits.jetbrains.services.codewhisperer.util.isWithin
2728
import software.aws.toolkits.jetbrains.services.codewhisperer.util.runIfIdcConnectionOrTelemetryEnabled
2829
import software.aws.toolkits.jetbrains.services.codewhisperer.util.toCodeChunk
2930
import software.aws.toolkits.jetbrains.settings.AwsSettings
@@ -237,4 +238,25 @@ class CodeWhispererUtilTest {
237238
unmodifiedCharsCount = getUnmodifiedAcceptedCharsCount(originalRecommendation, modifiedRecommendation)
238239
assertThat(unmodifiedCharsCount).isEqualTo(originalRecommendation.length)
239240
}
241+
242+
@Test
243+
fun `test isWithin() returns true if file is within the given directory`() {
244+
val projectRoot = fixture.tempDirFixture.findOrCreateDir("workspace/projectA")
245+
val file = fixture.addFileToProject("workspace/projectA/src/Sample.java", "").virtualFile
246+
assertThat(file.isWithin(projectRoot)).isTrue()
247+
}
248+
249+
@Test
250+
fun `test isWithin() returns false if file is not within the given directory`() {
251+
val projectRoot = fixture.tempDirFixture.findOrCreateDir("workspace/projectA")
252+
val file = fixture.addFileToProject("workspace/projectB/src/Sample.java", "").virtualFile
253+
assertThat(file.isWithin(projectRoot)).isFalse()
254+
}
255+
256+
@Test
257+
fun `test isWithin() returns false if file is not within the given directory but has the same prefix`() {
258+
val projectRoot = fixture.tempDirFixture.findOrCreateDir("workspace/projectA")
259+
val file = fixture.addFileToProject("workspace/projectA1/src/Sample.java", "").virtualFile
260+
assertThat(file.isWithin(projectRoot)).isFalse()
261+
}
240262
}

0 commit comments

Comments
 (0)