@@ -37,7 +37,7 @@ char* wasm_parse_query(const char* input) {
3737 if (result .error ) {
3838 char * error_msg = safe_strdup (result .error -> message );
3939 pg_query_free_parse_result (result );
40- return error_msg ;
40+ return error_msg ? error_msg : safe_strdup ( "Memory allocation failed" ) ;
4141 }
4242
4343 char * parse_tree = safe_strdup (result .parse_tree );
@@ -60,7 +60,7 @@ char* wasm_deparse_protobuf(const char* protobuf_data, size_t data_len) {
6060 if (result .error ) {
6161 char * error_msg = safe_strdup (result .error -> message );
6262 pg_query_free_deparse_result (result );
63- return error_msg ;
63+ return error_msg ? error_msg : safe_strdup ( "Memory allocation failed" ) ;
6464 }
6565
6666 char * query = safe_strdup (result .query );
@@ -79,7 +79,7 @@ char* wasm_parse_plpgsql(const char* input) {
7979 if (result .error ) {
8080 char * error_msg = safe_strdup (result .error -> message );
8181 pg_query_free_plpgsql_parse_result (result );
82- return error_msg ;
82+ return error_msg ? error_msg : safe_strdup ( "Memory allocation failed" ) ;
8383 }
8484
8585 if (!result .plpgsql_funcs ) {
@@ -119,7 +119,7 @@ char* wasm_fingerprint(const char* input) {
119119 if (result .error ) {
120120 char * error_msg = safe_strdup (result .error -> message );
121121 pg_query_free_fingerprint_result (result );
122- return error_msg ;
122+ return error_msg ? error_msg : safe_strdup ( "Memory allocation failed" ) ;
123123 }
124124
125125 char * fingerprint_str = safe_strdup (result .fingerprint_str );
@@ -140,14 +140,14 @@ char* wasm_parse_query_protobuf(const char* input, int* out_len) {
140140 * out_len = 0 ;
141141 char * error_msg = safe_strdup (result .error -> message );
142142 pg_query_free_protobuf_parse_result (result );
143- return error_msg ;
143+ return error_msg ? error_msg : safe_strdup ( "Memory allocation failed" ) ;
144144 }
145145
146146 char * protobuf_data = safe_malloc (result .parse_tree .len );
147147 if (!protobuf_data ) {
148148 pg_query_free_protobuf_parse_result (result );
149149 * out_len = 0 ;
150- return safe_strdup ( "Memory allocation failed" ) ;
150+ return NULL ;
151151 }
152152 memcpy (protobuf_data , result .parse_tree .data , result .parse_tree .len );
153153 * out_len = (int )result .parse_tree .len ;
@@ -185,7 +185,7 @@ char* wasm_normalize_query(const char* input) {
185185 if (result .error ) {
186186 char * error_msg = safe_strdup (result .error -> message );
187187 pg_query_free_normalize_result (result );
188- return error_msg ;
188+ return error_msg ? error_msg : safe_strdup ( "Memory allocation failed" ) ;
189189 }
190190
191191 char * normalized = safe_strdup (result .normalized_query );
@@ -235,24 +235,34 @@ WasmDetailedResult* wasm_parse_query_detailed(const char* input) {
235235 size_t message_len = strlen ("Parse error: at line , position " ) + strlen (parse_result .error -> message ) + 20 ;
236236 char * prefixed_message = safe_malloc (message_len );
237237 if (!prefixed_message ) {
238+ result -> has_error = 1 ;
239+ result -> message = safe_strdup ("Memory allocation failed" );
238240 pg_query_free_parse_result (parse_result );
239- free (result );
240- return NULL ;
241+ return result ;
241242 }
242243 snprintf (prefixed_message , message_len ,
243244 "Parse error: %s at line %d, position %d" ,
244245 parse_result .error -> message ,
245246 parse_result .error -> lineno ,
246247 parse_result .error -> cursorpos );
247248 result -> message = prefixed_message ;
248- result -> funcname = parse_result .error -> funcname ? safe_strdup (parse_result .error -> funcname ) : NULL ;
249- result -> filename = parse_result .error -> filename ? safe_strdup (parse_result .error -> filename ) : NULL ;
249+ char * funcname_copy = parse_result .error -> funcname ? safe_strdup (parse_result .error -> funcname ) : NULL ;
250+ char * filename_copy = parse_result .error -> filename ? safe_strdup (parse_result .error -> filename ) : NULL ;
251+ char * context_copy = parse_result .error -> context ? safe_strdup (parse_result .error -> context ) : NULL ;
252+
253+ result -> funcname = funcname_copy ;
254+ result -> filename = filename_copy ;
250255 result -> lineno = parse_result .error -> lineno ;
251256 result -> cursorpos = parse_result .error -> cursorpos ;
252- result -> context = parse_result . error -> context ? safe_strdup ( parse_result . error -> context ) : NULL ;
257+ result -> context = context_copy ;
253258 } else {
254259 result -> data = safe_strdup (parse_result .parse_tree );
255- result -> data_len = strlen (result -> data );
260+ if (result -> data ) {
261+ result -> data_len = strlen (result -> data );
262+ } else {
263+ result -> has_error = 1 ;
264+ result -> message = safe_strdup ("Memory allocation failed" );
265+ }
256266 }
257267
258268 pg_query_free_parse_result (parse_result );
0 commit comments