@@ -32,6 +32,13 @@ import { env } from './env'
3232import { generateNumberId } from './helpers'
3333import { logger } from './logger'
3434
35+ function escapeLikePattern ( value : string ) {
36+ return value
37+ . replaceAll ( '\\' , '\\\\' )
38+ . replaceAll ( '%' , String . raw `\%` )
39+ . replaceAll ( '_' , String . raw `\_` )
40+ }
41+
3542export class ObjectNotFoundError extends Error {
3643 constructor ( objectName : string ) {
3744 super ( `Object not found in storage: ${ objectName } ` )
@@ -402,7 +409,9 @@ export class Storage {
402409
403410 const prefixedPrimaryMatch = await this . db
404411 . selectFrom ( 'cache_entries' )
405- . where ( 'key' , 'like' , `${ primaryKey } %` )
412+ . where (
413+ sql < boolean > `${ sql . ref ( 'key' ) } like ${ `${ escapeLikePattern ( primaryKey ) } %` } escape ${ '\\' } ` ,
414+ )
406415 . where ( 'version' , '=' , version )
407416 . where ( 'scope' , '=' , scope )
408417 . where ( 'repoId' , '=' , repoId )
@@ -436,7 +445,9 @@ export class Storage {
436445
437446 const prefixedMatch = await this . db
438447 . selectFrom ( 'cache_entries' )
439- . where ( 'key' , 'like' , `${ key } %` )
448+ . where (
449+ sql < boolean > `${ sql . ref ( 'key' ) } like ${ `${ escapeLikePattern ( key ) } %` } escape ${ '\\' } ` ,
450+ )
440451 . where ( 'version' , '=' , version )
441452 . where ( 'scope' , '=' , scope )
442453 . where ( 'repoId' , '=' , repoId )
0 commit comments