LCOV - code coverage report
Current view: top level - home/build/openresty-1.13.6.1/build/set-misc-nginx-module-0.31/src - ngx_http_set_quote_json.c (source / functions) Hit Total Coverage
Test: coverage ngix Lines: 0 85 0.0 %
Date: 2020-03-03 04:25:50 Functions: 0 2 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : #ifndef DDEBUG
       2             : #define DDEBUG 0
       3             : #endif
       4             : #include "ddebug.h"
       5             : 
       6             : #include <ndk.h>
       7             : #include "ngx_http_set_quote_json.h"
       8             : 
       9             : ngx_int_t
      10           0 : ngx_http_set_misc_quote_json_str(ngx_http_request_t *r, ngx_str_t *res,
      11             :     ngx_http_variable_value_t *v)
      12             : {
      13             :     size_t                   len;
      14             :     u_char                  *p;
      15             :     size_t                   escape;
      16             : 
      17           0 :     if (v->not_found || v->len == 0) {
      18           0 :         res->data = (u_char *) "null";
      19           0 :         res->len = sizeof("null") - 1;
      20           0 :         return NGX_OK;
      21             :     }
      22             : 
      23           0 :     escape = ngx_http_set_misc_escape_json_str(NULL, v->data, v->len);
      24             : 
      25           0 :     len = sizeof("''") - 1
      26           0 :         + v->len
      27           0 :         + escape;
      28             : 
      29           0 :     p = ngx_palloc(r->pool, len);
      30           0 :     if (p == NULL) {
      31           0 :         return NGX_ERROR;
      32             :     }
      33             : 
      34           0 :     res->data = p;
      35           0 :     res->len = len;
      36             : 
      37           0 :     *p++ = '\"';
      38             : 
      39           0 :     if (escape == 0) {
      40           0 :         p = ngx_copy(p, v->data, v->len);
      41             : 
      42             :     } else {
      43           0 :         p = (u_char *) ngx_http_set_misc_escape_json_str(p, v->data, v->len);
      44             :     }
      45             : 
      46           0 :     *p++ = '\"';
      47             : 
      48           0 :     if (p != res->data + res->len) {
      49           0 :         ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
      50             :                       "set_quote_sql_str: buffer error");
      51           0 :         return NGX_ERROR;
      52             :     }
      53             : 
      54           0 :     return NGX_OK;
      55             : }
      56             : 
      57             : 
      58             : uintptr_t
      59           0 : ngx_http_set_misc_escape_json_str(u_char *dst, u_char *src, size_t size)
      60             : {
      61             :     ngx_uint_t                   n;
      62             : 
      63             :     static u_char hex[] = "0123456789abcdef";
      64             : 
      65           0 :     if (dst == NULL) {
      66             :         /* find the number of characters to be escaped */
      67             : 
      68           0 :         n = 0;
      69             : 
      70           0 :         while (size) {
      71             :             /* UTF-8 char has high bit of 1 */
      72           0 :             if ((*src & 0x80) == 0) {
      73           0 :                 switch (*src) {
      74           0 :                 case '\r':
      75             :                 case '\n':
      76             :                 case '\\':
      77             :                 case '"':
      78             :                 case '\f':
      79             :                 case '\b':
      80             :                 case '\t':
      81           0 :                     n++;
      82           0 :                     break;
      83           0 :                 default:
      84           0 :                     if (*src < 32) {
      85           0 :                         n += sizeof("\\u00xx") - 2;
      86             :                     }
      87             : 
      88           0 :                     break;
      89             :                 }
      90           0 :             }
      91             : 
      92           0 :             src++;
      93           0 :             size--;
      94             :         }
      95             : 
      96           0 :         return (uintptr_t) n;
      97             :     }
      98             : 
      99           0 :     while (size) {
     100           0 :         if ((*src & 0x80) == 0) {
     101           0 :             switch (*src) {
     102           0 :             case '\r':
     103           0 :                 *dst++ = '\\';
     104           0 :                 *dst++ = 'r';
     105           0 :                 break;
     106             : 
     107           0 :             case '\n':
     108           0 :                 *dst++ = '\\';
     109           0 :                 *dst++ = 'n';
     110           0 :                 break;
     111             : 
     112           0 :             case '\\':
     113           0 :                 *dst++ = '\\';
     114           0 :                 *dst++ = '\\';
     115           0 :                 break;
     116             : 
     117           0 :             case '"':
     118           0 :                 *dst++ = '\\';
     119           0 :                 *dst++ = '"';
     120           0 :                 break;
     121             : 
     122           0 :             case '\f':
     123           0 :                 *dst++ = '\\';
     124           0 :                 *dst++ = 'f';
     125           0 :                 break;
     126             : 
     127           0 :             case '\b':
     128           0 :                 *dst++ = '\\';
     129           0 :                 *dst++ = 'b';
     130           0 :                 break;
     131             : 
     132           0 :             case '\t':
     133           0 :                 *dst++ = '\\';
     134           0 :                 *dst++ = 't';
     135           0 :                 break;
     136             : 
     137           0 :             default:
     138           0 :                 if (*src < 32) { /* control chars */
     139           0 :                     *dst++ = '\\';
     140           0 :                     *dst++ = 'u';
     141           0 :                     *dst++ = '0';
     142           0 :                     *dst++ = '0';
     143           0 :                     *dst++ = hex[*src >> 4];
     144           0 :                     *dst++ = hex[*src & 0x0f];
     145             :                 } else {
     146           0 :                     *dst++ = *src;
     147             :                 }
     148           0 :                 break;
     149             :             } /* switch */
     150             : 
     151           0 :             src++;
     152             : 
     153             :         } else {
     154           0 :             *dst++ = *src++;
     155             :         }
     156             : 
     157           0 :         size--;
     158             :     }
     159             : 
     160           0 :     return (uintptr_t) dst;
     161             : }
     162             : 
     163             : 

Generated by: LCOV version 1.13