LCOV - code coverage report
Current view: top level - src/port - quotes.c (source / functions) Coverage Total Hit
Test: Code coverage Lines: 84.6 % 13 11
Test Date: 2026-01-26 10:56:24 Functions: 100.0 % 1 1
Legend: Lines:     hit not hit
Branches: + taken - not taken # not executed
Branches: 62.5 % 8 5

             Branch data     Line data    Source code
       1                 :             : /*-------------------------------------------------------------------------
       2                 :             :  *
       3                 :             :  * quotes.c
       4                 :             :  *        string quoting and escaping functions
       5                 :             :  *
       6                 :             :  * Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
       7                 :             :  * Portions Copyright (c) 1994, Regents of the University of California
       8                 :             :  *
       9                 :             :  *
      10                 :             :  * IDENTIFICATION
      11                 :             :  *        src/port/quotes.c
      12                 :             :  *
      13                 :             :  *-------------------------------------------------------------------------
      14                 :             :  */
      15                 :             : 
      16                 :             : #include "c.h"
      17                 :             : 
      18                 :             : /*
      19                 :             :  * Escape (by doubling) any single quotes or backslashes in given string
      20                 :             :  *
      21                 :             :  * Note: this is used to process postgresql.conf entries and to quote
      22                 :             :  * string literals in pg_basebackup for writing the recovery configuration.
      23                 :             :  * Since postgresql.conf strings are defined to treat backslashes as escapes,
      24                 :             :  * we have to double backslashes here.
      25                 :             :  *
      26                 :             :  * Since this function is only used for parsing or creating configuration
      27                 :             :  * files, we do not care about encoding considerations.
      28                 :             :  *
      29                 :             :  * Returns a malloced() string that it's the responsibility of the caller
      30                 :             :  * to free.
      31                 :             :  */
      32                 :             : char *
      33                 :          13 : escape_single_quotes_ascii(const char *src)
      34                 :             : {
      35                 :          13 :         int                     len = strlen(src),
      36                 :             :                                 i,
      37                 :             :                                 j;
      38                 :          13 :         char       *result = malloc(len * 2 + 1);
      39                 :             : 
      40         [ +  - ]:          13 :         if (!result)
      41                 :           0 :                 return NULL;
      42                 :             : 
      43         [ +  + ]:         234 :         for (i = 0, j = 0; i < len; i++)
      44                 :             :         {
      45   [ +  -  -  + ]:         221 :                 if (SQL_STR_DOUBLE(src[i], true))
      46                 :           0 :                         result[j++] = src[i];
      47                 :         221 :                 result[j++] = src[i];
      48                 :         221 :         }
      49                 :          13 :         result[j] = '\0';
      50                 :          13 :         return result;
      51                 :          13 : }
        

Generated by: LCOV version 2.3.2-1