Skip to content

Commit 9527132

Browse files
authored
Match DDB index names agianst regex (#2710)
1 parent 0c845dd commit 9527132

File tree

2 files changed

+26
-4
lines changed

2 files changed

+26
-4
lines changed

jetbrains-core/src/software/aws/toolkits/jetbrains/services/dynamodb/editor/DynamoDbTableEditor.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import software.amazon.awssdk.services.dynamodb.model.ExecuteStatementRequest
1818
import software.amazon.awssdk.services.dynamodb.model.KeySchemaElement
1919
import software.amazon.awssdk.services.dynamodb.model.KeyType
2020
import software.aws.toolkits.core.utils.debug
21+
import software.aws.toolkits.core.utils.error
2122
import software.aws.toolkits.core.utils.getLogger
2223
import software.aws.toolkits.jetbrains.services.dynamodb.DynamoDbUtils.executeStatementPaginator
2324
import software.aws.toolkits.jetbrains.services.dynamodb.Index
@@ -130,6 +131,7 @@ class DynamoDbTableEditor(private val dynamoTable: DynamoDbVirtualFile) : UserDa
130131
searchResults.setBusy(false)
131132
}
132133
} catch (e: Exception) {
134+
LOG.error(e) { "Query failed to execute" }
133135
withContext(edt) {
134136
searchResults.setError(e)
135137
searchResults.setBusy(false)

jetbrains-core/src/software/aws/toolkits/jetbrains/services/dynamodb/editor/SearchPanel.kt

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,14 +39,27 @@ class SearchPanel(private val tableInfo: TableInfo, initialSearchType: SearchTyp
3939
decorator.setContentComponent(queryScanPanel)
4040
}
4141

42+
fun getComponent() = panel
43+
4244
fun getSearchQuery(): Pair<Index, String> {
4345
queryScanPanel.apply()
4446

45-
return searchIndex to buildString {
46-
append("""SELECT * FROM "${tableInfo.tableName}"""")
47+
val fromField = buildString {
48+
append('"')
49+
append(verifyString(tableInfo.tableName))
50+
append('"')
51+
4752
searchIndex.indexName?.let {
48-
append("""."$it"""")
53+
append('.')
54+
append('"')
55+
append(verifyString(it))
56+
append('"')
4957
}
58+
}
59+
60+
return searchIndex to buildString {
61+
append("SELECT * FROM ")
62+
append(fromField)
5063

5164
if (searchType == SearchType.Query) {
5265
append(" WHERE ")
@@ -55,5 +68,12 @@ class SearchPanel(private val tableInfo: TableInfo, initialSearchType: SearchTyp
5568
}
5669
}
5770

58-
fun getComponent() = panel
71+
private fun verifyString(str: String): String = str.takeIf {
72+
str.matches(NAMING_RULES)
73+
} ?: throw IllegalArgumentException("'$str' does not match $NAMING_RULES")
74+
75+
private companion object {
76+
// https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.NamingRulesDataTypes.html#HowItWorks.NamingRules
77+
private val NAMING_RULES = """^[A-Za-z0-9_\-.]+${'$'}""".toRegex()
78+
}
5979
}

0 commit comments

Comments
 (0)