Simplify and clarify URL quoting js_std_urlGet

This commit is contained in:
Charlie Gordon 2024-02-12 18:34:52 +01:00 committed by Ben Noordhuis
parent ed49e0f39e
commit 79d417a90d

View file

@ -1337,7 +1337,7 @@ static JSValue js_std_urlGet(JSContext *ctx, JSValue this_val,
DynBuf header_buf_s, *header_buf = &header_buf_s; DynBuf header_buf_s, *header_buf = &header_buf_s;
char *buf; char *buf;
size_t i, len; size_t i, len;
int c, status; int status;
JSValue response = JS_UNDEFINED, ret_obj; JSValue response = JS_UNDEFINED, ret_obj;
JSValue options_obj; JSValue options_obj;
FILE *f; FILE *f;
@ -1365,17 +1365,20 @@ static JSValue js_std_urlGet(JSContext *ctx, JSValue this_val,
js_std_dbuf_init(ctx, &cmd_buf); js_std_dbuf_init(ctx, &cmd_buf);
dbuf_printf(&cmd_buf, "%s '", URL_GET_PROGRAM); dbuf_printf(&cmd_buf, "%s '", URL_GET_PROGRAM);
len = strlen(url); for(i = 0; url[i] != '\0'; i++) {
for(i = 0; i < len; i++) { unsigned char c = url[i];
switch (c = url[i]) { switch (c) {
case '\'': case '\'':
/* shell single quoted string does not support \' */
dbuf_putstr(&cmd_buf, "'\\''"); dbuf_putstr(&cmd_buf, "'\\''");
break; break;
case '[': case ']': case '{': case '}': case '\\': case '[': case ']': case '{': case '}': case '\\':
/* prevent interpretation by curl as range or set specification */
dbuf_putc(&cmd_buf, '\\'); dbuf_putc(&cmd_buf, '\\');
/* FALLTHROUGH */ /* FALLTHROUGH */
default: default:
dbuf_putc(&cmd_buf, c); dbuf_putc(&cmd_buf, c);
break;
} }
} }
JS_FreeCString(ctx, url); JS_FreeCString(ctx, url);