diff options
author | jiangph <jiangph@cn.ibm.com> | 2019-12-04 22:38:25 +0800 |
---|---|---|
committer | jiangph <jiangph@cn.ibm.com> | 2019-12-04 22:38:25 +0800 |
commit | 3cc47efdfd9e6510a70dff2e6462617f95af04bc (patch) | |
tree | be9c572faa9f8281524ebf73bc91cc03f5f7d0c0 | |
parent | e00ff5156c8ad73bc4b91aa3282b77dd6a1a1e5f (diff) | |
download | couchdb-remove-utf8-in-sm60.tar.gz |
remove utf8.cpparchive/remove-utf8-in-sm60remove-utf8-in-sm60
-rw-r--r-- | src/couch/priv/couch_js/60/http.cpp | 25 | ||||
-rw-r--r-- | src/couch/priv/couch_js/60/util.cpp | 17 | ||||
-rw-r--r-- | src/couch/priv/couch_js/60/util.h | 1 |
3 files changed, 27 insertions, 16 deletions
diff --git a/src/couch/priv/couch_js/60/http.cpp b/src/couch/priv/couch_js/60/http.cpp index 9ab47b2f0..6577cd44e 100644 --- a/src/couch/priv/couch_js/60/http.cpp +++ b/src/couch/priv/couch_js/60/http.cpp @@ -171,7 +171,6 @@ http_dtor(JSFreeOp* fop, JSObject* obj) { HTTPData* http = (HTTPData*) JS_GetPrivate(obj); if(http) { - if(http->url) free(http->url); if(http->req_headers) curl_slist_free_all(http->req_headers); free(http); } @@ -196,7 +195,7 @@ http_open(JSContext* cx, JSObject* req, JS::Value mth, JS::Value url, JS::Value goto done; } - method = enc_string(cx, mth, NULL); + method = (char *)js_to_string(cx, mth).c_str(); if(!method) { JS_ReportErrorUTF8(cx, "Failed to encode method."); goto done; @@ -205,7 +204,6 @@ http_open(JSContext* cx, JSObject* req, JS::Value mth, JS::Value url, JS::Value for(methid = 0; METHODS[methid] != NULL; methid++) { if(strcasecmp(METHODS[methid], method) == 0) break; } - if(methid > OPTIONS) { JS_ReportErrorUTF8(cx, "Invalid method specified."); goto done; @@ -223,7 +221,7 @@ http_open(JSContext* cx, JSObject* req, JS::Value mth, JS::Value url, JS::Value http->url = NULL; } - http->url = enc_string(cx, url, NULL); + http->url = (char *)js_to_string(cx, url).c_str(); if(http->url == NULL) { JS_ReportErrorUTF8(cx, "Failed to encode URL."); goto done; @@ -238,14 +236,12 @@ http_open(JSContext* cx, JSObject* req, JS::Value mth, JS::Value url, JS::Value curl_slist_free_all(http->req_headers); http->req_headers = NULL; } - // Disable Expect: 100-continue http->req_headers = curl_slist_append(http->req_headers, "Expect:"); ret = true; done: - if(method) free(method); return ret; } @@ -271,7 +267,7 @@ http_set_hdr(JSContext* cx, JSObject* req, JS::Value name, JS::Value val) goto done; } - keystr = enc_string(cx, name, NULL); + keystr = (char *)js_to_string(cx, name).c_str(); if(!keystr) { JS_ReportErrorUTF8(cx, "Failed to encode header name."); @@ -284,7 +280,7 @@ http_set_hdr(JSContext* cx, JSObject* req, JS::Value name, JS::Value val) goto done; } - valstr = enc_string(cx, val, NULL); + valstr = (char *)js_to_string(cx, val).c_str(); if(!valstr) { JS_ReportErrorUTF8(cx, "Failed to encode header value."); @@ -304,8 +300,6 @@ http_set_hdr(JSContext* cx, JSObject* req, JS::Value name, JS::Value val) ret = true; done: - if(keystr) free(keystr); - if(valstr) free(valstr); if(hdrbuf) free(hdrbuf); return ret; } @@ -324,7 +318,7 @@ http_send(JSContext* cx, JSObject* req, JS::Value body) } if(!body.isUndefined()) { - bodystr = enc_string(cx, body, &bodylen); + bodystr = (char *)js_to_string(cx, body).c_str(); if(!bodystr) { JS_ReportErrorUTF8(cx, "Failed to encode body."); goto done; @@ -334,7 +328,6 @@ http_send(JSContext* cx, JSObject* req, JS::Value body) ret = go(cx, req, http, bodystr, bodylen); done: - if(bodystr) free(bodystr); return ret; } @@ -463,13 +456,12 @@ go(JSContext* cx, JSObject* obj, HTTPData* http, char* body, size_t bodylen) tmp = JS_GetReservedSlot(obj, 0); - if(!(referer = enc_string(cx, tmp, NULL))) { + if(!(referer = (char *)js_to_string(cx, tmp).c_str())) { JS_ReportErrorUTF8(cx, "Failed to encode referer."); if(state.recvbuf) JS_free(cx, state.recvbuf); return ret; } curl_easy_setopt(HTTP_HANDLE, CURLOPT_REFERER, referer); - free(referer); if(http->method < 0 || http->method > OPTIONS) { JS_ReportErrorUTF8(cx, "INTERNAL: Unknown method."); @@ -533,6 +525,7 @@ go(JSContext* cx, JSObject* obj, HTTPData* http, char* body, size_t bodylen) if(state.recvbuf) { state.recvbuf[state.read] = '\0'; jsbody = dec_string(cx, state.recvbuf, state.read+1); + //jsbody = string_to_js(cx, std::string(state.recvbuf, state.read)); if(!jsbody) { // If we can't decode the body as UTF-8 we forcefully // convert it to a string by just forcing each byte @@ -563,7 +556,6 @@ go(JSContext* cx, JSObject* obj, HTTPData* http, char* body, size_t bodylen) if(state.recvbuf) JS_free(cx, state.recvbuf); return ret; } - ret = true; if(state.recvbuf) JS_free(cx, state.recvbuf); return ret; @@ -638,7 +630,8 @@ recv_header(void *ptr, size_t size, size_t nmem, void *data) } // Append the new header to our array. - hdr = dec_string(state->cx, header, length); + + hdr = string_to_js(state->cx, std::string(header)); if(!hdr) { return CURLE_WRITE_ERROR; } diff --git a/src/couch/priv/couch_js/60/util.cpp b/src/couch/priv/couch_js/60/util.cpp index 894b4254e..43fe6b88f 100644 --- a/src/couch/priv/couch_js/60/util.cpp +++ b/src/couch/priv/couch_js/60/util.cpp @@ -22,6 +22,23 @@ #include "utf8.h" std::string +js_to_string(JSContext* cx, JS::Value val) +{ + JS::RootedString sval(cx); + JS::HandleValue hval = JS::HandleValue::fromMarkedLocation(&val); + sval = val.toString(); + + JS::UniqueChars chars(JS_EncodeStringToUTF8(cx, sval)); + if(!chars) { + JS_ClearPendingException(cx); + fprintf(stderr, "Error converting value to string.\n"); + exit(3); + } + + return chars.get(); +} + +std::string js_to_string(JSContext* cx, JS::HandleValue val) { JS::RootedString sval(cx); diff --git a/src/couch/priv/couch_js/60/util.h b/src/couch/priv/couch_js/60/util.h index 45caa341f..d24c33647 100644 --- a/src/couch/priv/couch_js/60/util.h +++ b/src/couch/priv/couch_js/60/util.h @@ -25,6 +25,7 @@ typedef struct { JSString* uri; } couch_args; +std::string js_to_string(JSContext* cx, JS::Value val); std::string js_to_string(JSContext* cx, JS::HandleValue val); std::string js_to_string(JSContext* cx, JSString *str); JSString* string_to_js(JSContext* cx, const std::string& s); |