| 1735 | } |
| 1736 | |
| 1737 | static JSValue js_std_urlGet(JSContext *ctx, JSValueConst this_val, |
| 1738 | int argc, JSValueConst *argv) |
| 1739 | { |
| 1740 | const char *url; |
| 1741 | DynBuf cmd_buf; |
| 1742 | DynBuf data_buf_s, *data_buf = &data_buf_s; |
| 1743 | DynBuf header_buf_s, *header_buf = &header_buf_s; |
| 1744 | char *buf; |
| 1745 | size_t i, len; |
| 1746 | int status; |
| 1747 | JSValue response = JS_UNDEFINED, ret_obj; |
| 1748 | JSValueConst options_obj; |
| 1749 | FILE *f; |
| 1750 | bool binary_flag, full_flag; |
| 1751 | |
| 1752 | url = JS_ToCString(ctx, argv[0]); |
| 1753 | if (!url) |
| 1754 | return JS_EXCEPTION; |
| 1755 | |
| 1756 | binary_flag = false; |
| 1757 | full_flag = false; |
| 1758 | |
| 1759 | if (argc >= 2) { |
| 1760 | options_obj = argv[1]; |
| 1761 | |
| 1762 | if (get_bool_option(ctx, &binary_flag, options_obj, "binary")) |
| 1763 | goto fail_obj; |
| 1764 | |
| 1765 | if (get_bool_option(ctx, &full_flag, options_obj, "full")) { |
| 1766 | fail_obj: |
| 1767 | JS_FreeCString(ctx, url); |
| 1768 | return JS_EXCEPTION; |
| 1769 | } |
| 1770 | } |
| 1771 | |
| 1772 | js_std_dbuf_init(ctx, &cmd_buf); |
| 1773 | dbuf_printf(&cmd_buf, "%s '", URL_GET_PROGRAM); |
| 1774 | for(i = 0; url[i] != '\0'; i++) { |
| 1775 | unsigned char c = url[i]; |
| 1776 | switch (c) { |
| 1777 | case '\'': |
| 1778 | /* shell single quoted string does not support \' */ |
| 1779 | dbuf_putstr(&cmd_buf, "'\\''"); |
| 1780 | break; |
| 1781 | case '[': case ']': case '{': case '}': case '\\': |
| 1782 | /* prevent interpretation by curl as range or set specification */ |
| 1783 | dbuf_putc(&cmd_buf, '\\'); |
| 1784 | /* FALLTHROUGH */ |
| 1785 | default: |
| 1786 | dbuf_putc(&cmd_buf, c); |
| 1787 | break; |
| 1788 | } |
| 1789 | } |
| 1790 | JS_FreeCString(ctx, url); |
| 1791 | dbuf_putstr(&cmd_buf, "'"); |
| 1792 | dbuf_putc(&cmd_buf, '\0'); |
| 1793 | if (dbuf_error(&cmd_buf)) { |
| 1794 | dbuf_free(&cmd_buf); |
nothing calls this directly
no test coverage detected