Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit45fe7e0

Browse files
committed
Refactor test_escape.c for additional ways of testing.
Start the file with static functions not specific to pe_test_vectorstests. This way, new tests can use them without disrupting the file'slayout. Change report_result() PQExpBuffer arguments to plain strings.Back-patch to v13 (all supported versions), for the next commit.Reviewed-by: Masahiko Sawada <sawada.mshk@gmail.com>Backpatch-through: 13Security:CVE-2025-4207
1 parent5449bf7 commit45fe7e0

File tree

1 file changed

+82
-80
lines changed

1 file changed

+82
-80
lines changed

‎src/test/modules/test_escape/test_escape.c

Lines changed: 82 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ typedef struct pe_test_config
3131
intfailure_count;
3232
}pe_test_config;
3333

34+
#defineNEVER_ACCESS_STR "\xff never-to-be-touched"
35+
3436

3537
/*
3638
* An escape function to be tested by this test.
@@ -86,6 +88,82 @@ static const PsqlScanCallbacks test_scan_callbacks = {
8688
};
8789

8890

91+
/*
92+
* Print the string into buf, making characters outside of plain ascii
93+
* somewhat easier to recognize.
94+
*
95+
* The output format could stand to be improved significantly, it's not at all
96+
* unambiguous.
97+
*/
98+
staticvoid
99+
escapify(PQExpBufferbuf,constchar*str,size_tlen)
100+
{
101+
for (size_ti=0;i<len;i++)
102+
{
103+
charc=*str;
104+
105+
if (c=='\n')
106+
appendPQExpBufferStr(buf,"\\n");
107+
elseif (c=='\0')
108+
appendPQExpBufferStr(buf,"\\0");
109+
elseif (c<' '||c>'~')
110+
appendPQExpBuffer(buf,"\\x%2x", (uint8_t)c);
111+
else
112+
appendPQExpBufferChar(buf,c);
113+
str++;
114+
}
115+
}
116+
117+
staticvoid
118+
report_result(pe_test_config*tc,
119+
boolsuccess,
120+
constchar*testname,
121+
constchar*details,
122+
constchar*subname,
123+
constchar*resultdesc)
124+
{
125+
inttest_id=++tc->test_count;
126+
boolprint_details= true;
127+
boolprint_result= true;
128+
129+
if (success)
130+
{
131+
if (tc->verbosity <=0)
132+
print_details= false;
133+
if (tc->verbosity<0)
134+
print_result= false;
135+
}
136+
else
137+
tc->failure_count++;
138+
139+
if (print_details)
140+
printf("%s",details);
141+
142+
if (print_result)
143+
printf("%s %d - %s: %s: %s\n",
144+
success ?"ok" :"not ok",
145+
test_id,testname,
146+
subname,
147+
resultdesc);
148+
}
149+
150+
/*
151+
* Return true for encodings in which bytes in a multi-byte character look
152+
* like valid ascii characters.
153+
*/
154+
staticbool
155+
encoding_conflicts_ascii(intencoding)
156+
{
157+
/*
158+
* We don't store this property directly anywhere, but whether an encoding
159+
* is a client-only encoding is a good proxy.
160+
*/
161+
if (encoding>PG_ENCODING_BE_LAST)
162+
return true;
163+
return false;
164+
}
165+
166+
89167
staticbool
90168
escape_literal(PGconn*conn,PQExpBuffertarget,
91169
constchar*unescaped,size_tunescaped_len,
@@ -383,81 +461,6 @@ static pe_test_vector pe_test_vectors[] =
383461
};
384462

385463

386-
/*
387-
* Print the string into buf, making characters outside of plain ascii
388-
* somewhat easier to recognize.
389-
*
390-
* The output format could stand to be improved significantly, it's not at all
391-
* unambiguous.
392-
*/
393-
staticvoid
394-
escapify(PQExpBufferbuf,constchar*str,size_tlen)
395-
{
396-
for (size_ti=0;i<len;i++)
397-
{
398-
charc=*str;
399-
400-
if (c=='\n')
401-
appendPQExpBufferStr(buf,"\\n");
402-
elseif (c=='\0')
403-
appendPQExpBufferStr(buf,"\\0");
404-
elseif (c<' '||c>'~')
405-
appendPQExpBuffer(buf,"\\x%2x", (uint8_t)c);
406-
else
407-
appendPQExpBufferChar(buf,c);
408-
str++;
409-
}
410-
}
411-
412-
staticvoid
413-
report_result(pe_test_config*tc,
414-
boolsuccess,
415-
PQExpBuffertestname,
416-
PQExpBufferdetails,
417-
constchar*subname,
418-
constchar*resultdesc)
419-
{
420-
inttest_id=++tc->test_count;
421-
boolprint_details= true;
422-
boolprint_result= true;
423-
424-
if (success)
425-
{
426-
if (tc->verbosity <=0)
427-
print_details= false;
428-
if (tc->verbosity<0)
429-
print_result= false;
430-
}
431-
else
432-
tc->failure_count++;
433-
434-
if (print_details)
435-
printf("%s",details->data);
436-
437-
if (print_result)
438-
printf("%s %d - %s: %s: %s\n",
439-
success ?"ok" :"not ok",
440-
test_id,testname->data,
441-
subname,
442-
resultdesc);
443-
}
444-
445-
/*
446-
* Return true for encodings in which bytes in a multi-byte character look
447-
* like valid ascii characters.
448-
*/
449-
staticbool
450-
encoding_conflicts_ascii(intencoding)
451-
{
452-
/*
453-
* We don't store this property directly anywhere, but whether an encoding
454-
* is a client-only encoding is a good proxy.
455-
*/
456-
if (encoding>PG_ENCODING_BE_LAST)
457-
return true;
458-
return false;
459-
}
460-
461464
staticconstchar*
462465
scan_res_s(PsqlScanResultres)
463466
{
@@ -532,7 +535,7 @@ test_psql_parse(pe_test_config *tc, PQExpBuffer testname,
532535
else
533536
resdesc="ok";
534537

535-
report_result(tc, !test_fails,testname,details,
538+
report_result(tc, !test_fails,testname->data,details->data,
536539
"psql parse",
537540
resdesc);
538541
}
@@ -617,7 +620,6 @@ test_one_vector_escape(pe_test_config *tc, const pe_test_vector *tv, const pe_te
617620
*/
618621
appendBinaryPQExpBuffer(raw_buf,tv->escape,tv->escape_len);
619622

620-
#defineNEVER_ACCESS_STR "\xff never-to-be-touched"
621623
if (ef->supports_input_length)
622624
{
623625
/*
@@ -671,7 +673,7 @@ test_one_vector_escape(pe_test_config *tc, const pe_test_vector *tv, const pe_te
671673
* here, but that's not available everywhere.
672674
*/
673675
contains_never=strstr(escape_buf->data,NEVER_ACCESS_STR)==NULL;
674-
report_result(tc,contains_never,testname,details,
676+
report_result(tc,contains_never,testname->data,details->data,
675677
"escaped data beyond end of input",
676678
contains_never ?"no" :"all secrets revealed");
677679
}
@@ -714,7 +716,7 @@ test_one_vector_escape(pe_test_config *tc, const pe_test_vector *tv, const pe_te
714716
resdesc="valid input failed to escape, due to zero byte";
715717
}
716718

717-
report_result(tc,ok,testname,details,
719+
report_result(tc,ok,testname->data,details->data,
718720
"input validity vs escape success",
719721
resdesc);
720722
}
@@ -744,7 +746,7 @@ test_one_vector_escape(pe_test_config *tc, const pe_test_vector *tv, const pe_te
744746
resdesc="invalid input produced valid output";
745747
}
746748

747-
report_result(tc,ok,testname,details,
749+
report_result(tc,ok,testname->data,details->data,
748750
"input and escaped encoding validity",
749751
resdesc);
750752
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp