@@ -225,52 +225,33 @@ vmod_modifyparams(VRT_CTX, VCL_STRING uri, VCL_STRING params_in,
225
225
return NULL ;
226
226
}
227
227
228
- // Check for existing query string
229
- char * query_str = strchr (uri , '?' );
230
- if (query_str == NULL ) {
231
- char * ws_uri = WS_Copy (ctx -> ws , uri , strlen (uri ) + 1 );
232
- if (ws_uri == NULL ) {
233
- VRT_fail (ctx ,
234
- "WS_Copy: out of workspace when returning unmodified URI" );
235
- return NULL ;
236
- }
237
- return ws_uri ;
228
+ char * uri_buf = WS_Copy (ctx -> ws , uri , strlen (uri ) + 1 );
229
+ if (!uri_buf ) {
230
+ VRT_fail (ctx , "WS_Copy: uri_buf: out of workspace" );
231
+ return NULL ;
238
232
}
239
233
240
- size_t base_uri_len = query_str - uri ;
241
- char base_uri [base_uri_len + 1 ];
242
- memcpy (base_uri , uri , base_uri_len );
243
- base_uri [base_uri_len ] = '\0' ;
234
+ char * query_str = strchr (uri_buf , '?' );
235
+ // No query string present so return the base URI
236
+ if (query_str == NULL ) {
237
+ return uri_buf ;
238
+ }
244
239
245
240
// Move past the '?'
246
- query_str = query_str + 1 ;
241
+ * query_str = '\0' ;
242
+ query_str ++ ;
247
243
248
- // If no query params, return base_uri
244
+ // If no query params present , return just the base URI
249
245
if (* query_str == '\0' ) {
250
- char * ws_uri = WS_Copy (ctx -> ws , base_uri , base_uri_len + 1 );
251
- if (ws_uri == NULL ) {
252
- VRT_fail (ctx , "WS_Copy: out of workspace" );
253
- return NULL ;
254
- }
255
- return ws_uri ;
246
+ return uri_buf ;
256
247
}
257
248
249
+ // If params_in is NULL or empty, remove all query params and just return
250
+ // base URI
258
251
if (params_in == NULL || * params_in == '\0' ) {
259
- char * ws_uri = WS_Copy (ctx -> ws , base_uri , base_uri_len + 1 );
260
- if (!ws_uri ) {
261
- VRT_fail (ctx , "WS_Copy: out of workspace" );
262
- return NULL ;
263
- }
264
- return ws_uri ;
252
+ return uri_buf ;
265
253
}
266
254
267
- char * query_str_copy = WS_Copy (ctx -> ws , query_str , strlen (query_str ) + 1 );
268
- if (!query_str_copy ) {
269
- VRT_fail (ctx , "WS_Copy: query_str_copy: out of workspace" );
270
- return NULL ;
271
- }
272
-
273
- // Parse filter parameters
274
255
char * filter_params [MAX_FILTER_PARAMS ];
275
256
size_t num_filter_params = 0 ;
276
257
if (parse_filter_params (ctx , params_in , filter_params , & num_filter_params ) <
@@ -279,22 +260,17 @@ vmod_modifyparams(VRT_CTX, VCL_STRING uri, VCL_STRING params_in,
279
260
}
280
261
281
262
query_param_t * head ;
282
- int no_param = tokenize_querystring (ctx , & head , query_str_copy );
263
+ int no_param = tokenize_querystring (ctx , & head , query_str );
283
264
if (no_param < 0 ) {
284
- VRT_fail (ctx , "tokenize_querystring failed" );
285
265
return NULL ;
286
266
}
287
267
268
+ // No parameters after tokenization means just return the base URI
288
269
if (no_param == 0 ) {
289
- char * ws_uri = WS_Copy (ctx -> ws , base_uri , base_uri_len + 1 );
290
- if (!ws_uri ) {
291
- VRT_fail (ctx , "WS_Copy: out of workspace" );
292
- return NULL ;
293
- }
294
- return ws_uri ;
270
+ return uri_buf ;
295
271
}
296
272
297
- return rebuild_query_string (ctx , base_uri , head , (size_t )no_param ,
273
+ return rebuild_query_string (ctx , uri_buf , head , (size_t )no_param ,
298
274
filter_params , num_filter_params ,
299
275
exclude_params );
300
276
}
0 commit comments