Skip to content

Implement helpers for URI form percentage unescaping#2633

Merged
jviotti merged 2 commits into
mainfrom
uri-unescape-form
Jul 20, 2026
Merged

Implement helpers for URI form percentage unescaping#2633
jviotti merged 2 commits into
mainfrom
uri-unescape-form

Conversation

@jviotti

@jviotti jviotti commented Jul 20, 2026

Copy link
Copy Markdown
Member

Signed-off-by: Juan Cruz Viotti jv@jviotti.com

Review in cubic

Signed-off-by: Juan Cruz Viotti <jv@jviotti.com>

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

1 issue found across 4 files

Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name="src/core/uri/include/sourcemeta/core/uri.h">

<violation number="1" location="src/core/uri/include/sourcemeta/core/uri.h:827">
P2: The `unescape_form` method returns a `bool` indicating whether decoding succeeded, but the return value is not marked `[[nodiscard]]`. If a caller ignores this return value, they could mistakenly use `output` after a failed decode — the function restores `output` to its original contents on failure, so the caller would see an unchanged string without realizing the input was malformed. Other `bool`-returning methods in this class (e.g., `is_absolute()`, `is_scheme()`, `is_ipv4()`) all carry `[[nodiscard]]` to catch exactly this kind of silent misuse. Consider adding `[[nodiscard]]` to the declaration.</violation>
</file>

Reply with feedback, questions, or to request a fix.

Re-trigger cubic

/// assert(sourcemeta::core::URI::unescape_form("a+b%2Fc", output));
/// assert(output == "a b/c");
/// ```
static auto unescape_form(std::string_view input, std::string &output)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2: The unescape_form method returns a bool indicating whether decoding succeeded, but the return value is not marked [[nodiscard]]. If a caller ignores this return value, they could mistakenly use output after a failed decode — the function restores output to its original contents on failure, so the caller would see an unchanged string without realizing the input was malformed. Other bool-returning methods in this class (e.g., is_absolute(), is_scheme(), is_ipv4()) all carry [[nodiscard]] to catch exactly this kind of silent misuse. Consider adding [[nodiscard]] to the declaration.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At src/core/uri/include/sourcemeta/core/uri.h, line 827:

<comment>The `unescape_form` method returns a `bool` indicating whether decoding succeeded, but the return value is not marked `[[nodiscard]]`. If a caller ignores this return value, they could mistakenly use `output` after a failed decode — the function restores `output` to its original contents on failure, so the caller would see an unchanged string without realizing the input was malformed. Other `bool`-returning methods in this class (e.g., `is_absolute()`, `is_scheme()`, `is_ipv4()`) all carry `[[nodiscard]]` to catch exactly this kind of silent misuse. Consider adding `[[nodiscard]]` to the declaration.</comment>

<file context>
@@ -807,6 +807,26 @@ class SOURCEMETA_CORE_URI_EXPORT URI {
+  /// assert(sourcemeta::core::URI::unescape_form("a+b%2Fc", output));
+  /// assert(output == "a b/c");
+  /// ```
+  static auto unescape_form(std::string_view input, std::string &output)
+      -> bool;
+
</file context>
Suggested change
static auto unescape_form(std::string_view input, std::string &output)
[[nodiscard]] static auto unescape_form(std::string_view input, std::string &output)

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Benchmark (linux/llvm)

Details
Benchmark suite Current: 915a07e Previous: c2e9865 Ratio
Regex_Lower_S_Or_Upper_S_Asterisk 2.501942190302795 ns/iter 2.507329895571885 ns/iter 1.00
Regex_Caret_Lower_S_Or_Upper_S_Asterisk_Dollar 2.1926125410354804 ns/iter 2.178696794417547 ns/iter 1.01
Regex_Period_Asterisk 2.1932232724214105 ns/iter 2.1777364777720405 ns/iter 1.01
Regex_Group_Period_Asterisk_Group 2.4908517705131197 ns/iter 2.489255824701675 ns/iter 1.00
Regex_Period_Plus 3.1175936479875723 ns/iter 3.114095792348727 ns/iter 1.00
Regex_Period 2.8031566861360213 ns/iter 2.8010255954436856 ns/iter 1.00
Regex_Caret_Period_Plus_Dollar 2.803088112560838 ns/iter 2.716322676105609 ns/iter 1.03
Regex_Caret_Group_Period_Plus_Group_Dollar 3.1145629683872307 ns/iter 2.8026993953283994 ns/iter 1.11
Regex_Caret_Period_Asterisk_Dollar 3.7358263193803016 ns/iter 2.8016800596917113 ns/iter 1.33
Regex_Caret_Group_Period_Asterisk_Group_Dollar 3.427573849045745 ns/iter 2.488513946961601 ns/iter 1.38
Regex_Caret_X_Hyphen 6.546117634983428 ns/iter 6.529284694225702 ns/iter 1.00
Regex_Period_Md_Dollar 27.754978156477 ns/iter 27.731215801580483 ns/iter 1.00
Regex_Caret_Slash_Period_Asterisk 7.163198902692216 ns/iter 6.194049148903488 ns/iter 1.16
Regex_Caret_Period_Range_Dollar 4.359688849039084 ns/iter 4.356139070168215 ns/iter 1.00
Regex_Nested_Backtrack 38.60903434089674 ns/iter 38.45463811762341 ns/iter 1.00
JSON_Array_Of_Objects_Unique 443.46077381228184 ns/iter 440.78753111026333 ns/iter 1.01
JSON_Parse_1 4889.801271360601 ns/iter 4905.537942319567 ns/iter 1.00
JSON_Parse_Real 5410.731268177646 ns/iter 5405.967688133417 ns/iter 1.00
JSON_Parse_Decimal 7565.688513389684 ns/iter 7485.8289988775805 ns/iter 1.01
JSON_Parse_Schema_ISO_Language 3547104.98989867 ns/iter 3537154.252525296 ns/iter 1.00
JSON_Parse_Integer 3841.0936946260863 ns/iter 3834.750997232639 ns/iter 1.00
JSON_Parse_String_NonSSO_Plain 5019.966450000766 ns/iter 5137.522694007938 ns/iter 0.98
JSON_Parse_String_SSO_Plain 2703.4321657354944 ns/iter 2769.744460551862 ns/iter 0.98
JSON_Parse_String_Escape_Heavy 14421.986584232702 ns/iter 14140.917578778406 ns/iter 1.02
JSON_Parse_Object_Short_Keys 10794.251516737942 ns/iter 10535.136030794742 ns/iter 1.02
JSON_Parse_Object_Scalar_Properties 4212.641866587793 ns/iter 4103.183922067982 ns/iter 1.03
JSON_Parse_Object_Array_Properties 5451.376324224409 ns/iter 5671.313902581027 ns/iter 0.96
JSON_Parse_Object_Object_Properties 5492.039176976866 ns/iter 5497.690746128224 ns/iter 1.00
JSON_Parse_Nested_Containers 44894.44336962982 ns/iter 44749.98570973356 ns/iter 1.00
JSON_From_String_Copy 20.579659390492335 ns/iter 20.56034902915285 ns/iter 1.00
JSON_From_String_Temporary 17.76779269021811 ns/iter 17.754248908379086 ns/iter 1.00
JSON_Number_To_Double 24.104571904691387 ns/iter 24.030217561526015 ns/iter 1.00
JSON_Object_At_Last_Key/8 3.8534916955101712 ns/iter 3.844832691883154 ns/iter 1.00
JSON_Object_At_Last_Key/32 12.443780256206296 ns/iter 12.271961531916473 ns/iter 1.01
JSON_Object_At_Last_Key/128 49.46820466800473 ns/iter 49.067495464255586 ns/iter 1.01
JSON_Object_At_Last_Key/512 393.5312313794092 ns/iter 394.01705118965606 ns/iter 1.00
JSON_Fast_Hash_Helm_Chart_Lock 66.02966446927694 ns/iter 65.9990623462842 ns/iter 1.00
JSON_Equality_Helm_Chart_Lock 171.54259357369557 ns/iter 170.63443946002724 ns/iter 1.01
JSON_Divisible_By_Decimal 246.41268887386119 ns/iter 252.4578474251214 ns/iter 0.98
JSON_String_Equal/10 5.927187746834188 ns/iter 5.9193716127947695 ns/iter 1.00
JSON_String_Equal/100 6.552347747578484 ns/iter 6.536961323915764 ns/iter 1.00
JSON_String_Equal_Small_By_Perfect_Hash/10 0.9421377855164067 ns/iter 0.932679910273291 ns/iter 1.01
JSON_String_Equal_Small_By_Runtime_Perfect_Hash/10 10.590796289448443 ns/iter 14.920406471662755 ns/iter 0.71
JSON_String_Fast_Hash/10 2.805877865885541 ns/iter 2.8006948045037596 ns/iter 1.00
JSON_String_Fast_Hash/100 2.8034054012309895 ns/iter 2.8004266407428067 ns/iter 1.00
JSON_String_Key_Hash/10 2.192773587958368 ns/iter 2.698623227486724 ns/iter 0.81
JSON_String_Key_Hash/100 6.544787349466681 ns/iter 9.02153923668944 ns/iter 0.73
JSON_Object_Defines_Miss_Same_Length 3.427200746254639 ns/iter 3.412503525535331 ns/iter 1.00
JSON_Object_Defines_Miss_Too_Small 3.2003074597472736 ns/iter 3.0907754585054055 ns/iter 1.04
JSON_Object_Defines_Miss_Too_Large 2.7382306695235 ns/iter 2.7672489416830923 ns/iter 0.99
Pointer_Object_Traverse 28.940849806426847 ns/iter 28.58577947710266 ns/iter 1.01
Pointer_Object_Try_Traverse 31.36211370354658 ns/iter 31.194657524608576 ns/iter 1.01
Pointer_Push_Back_Pointer_To_Weak_Pointer 178.52839511272188 ns/iter 224.94910503505793 ns/iter 0.79
Pointer_Walker_Schema_ISO_Language 2625441.6466162 ns/iter 2665277.269962046 ns/iter 0.99
Pointer_Maybe_Tracked_Deeply_Nested/0 1248043.6851521358 ns/iter 1246766.0570410867 ns/iter 1.00
Pointer_Maybe_Tracked_Deeply_Nested/1 1797685.1116504825 ns/iter 1657539.4407582993 ns/iter 1.08
Pointer_Position_Tracker_Get_Deeply_Nested 686.6691236150206 ns/iter 665.2366354735633 ns/iter 1.03
JSONPath_Descendant_Filter_Nested 1566.6052414280227 ns/iter 1592.3269021812666 ns/iter 0.98
URITemplateRouter_Create 31931.58321614955 ns/iter 31934.02625211019 ns/iter 1.00
URITemplateRouter_Match 179.6900708050676 ns/iter 187.41710418810268 ns/iter 0.96
URITemplateRouter_Match_BasePath 211.05922878162178 ns/iter 220.79081137182288 ns/iter 0.96
URITemplateRouterView_Restore 8487.799810027276 ns/iter 8479.97637626179 ns/iter 1.00
URITemplateRouterView_Match 164.3490417152347 ns/iter 164.07662196901552 ns/iter 1.00
URITemplateRouterView_Match_BasePath 187.3344731337008 ns/iter 186.57753564300455 ns/iter 1.00
URITemplateRouterView_Arguments 433.5404708460521 ns/iter 440.0386091638861 ns/iter 0.99
JSONL_Parse_Large 9752800.944445048 ns/iter 9595468.698630113 ns/iter 1.02
JSONL_Parse_Large_GZIP 11389994.370968878 ns/iter 11223426.746031662 ns/iter 1.01
JSONLD_Catalog_Annotation_List_Populate 1246340.813167383 ns/iter 1255267.2228162375 ns/iter 0.99
JSONLD_Catalog_Materialize 4186188.403614406 ns/iter 4155154.4107141765 ns/iter 1.01
HTML_Build_Table_100000 67451868.0999995 ns/iter 68671175.80000013 ns/iter 0.98
HTML_Render_Table_100000 5348635.442748 ns/iter 5397448.511628279 ns/iter 0.99
GZIP_Compress_ISO_Language_Set_3_Locations 33463815.904762365 ns/iter 33069552.095239054 ns/iter 1.01
GZIP_Decompress_ISO_Language_Set_3_Locations 4197629.485030327 ns/iter 4056809.104651467 ns/iter 1.03
GZIP_Compress_ISO_Language_Set_3_Schema 1890340.132432492 ns/iter 1884915.6657680862 ns/iter 1.00
GZIP_Decompress_ISO_Language_Set_3_Schema 350613.7887606914 ns/iter 351115.3432160957 ns/iter 1.00
JOSE_VerifySignature_RS256 58202.2987132387 ns/iter 58254.53015451145 ns/iter 1.00
JOSE_VerifySignature_ES512 2464639.619718592 ns/iter 2433672.4062498957 ns/iter 1.01

This comment was automatically generated by workflow using github-action-benchmark.

Signed-off-by: Juan Cruz Viotti <jv@jviotti.com>

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Benchmark (macos/llvm)

Details
Benchmark suite Current: 915a07e Previous: c2e9865 Ratio
Regex_Lower_S_Or_Upper_S_Asterisk 1.768498883590161 ns/iter 2.8426476658658393 ns/iter 0.62
Regex_Caret_Lower_S_Or_Upper_S_Asterisk_Dollar 1.6992494382665226 ns/iter 2.643929256345024 ns/iter 0.64
Regex_Period_Asterisk 1.7426538542451029 ns/iter 2.6116871798197314 ns/iter 0.67
Regex_Group_Period_Asterisk_Group 1.7324452419089473 ns/iter 2.1087948297485637 ns/iter 0.82
Regex_Period_Plus 2.0997802254725793 ns/iter 2.751498232126098 ns/iter 0.76
Regex_Period 2.1918101389127678 ns/iter 2.6661772858899795 ns/iter 0.82
Regex_Caret_Period_Plus_Dollar 2.177099130529799 ns/iter 2.339905390438616 ns/iter 0.93
Regex_Caret_Group_Period_Plus_Group_Dollar 2.2051035436564606 ns/iter 2.3431902685590598 ns/iter 0.94
Regex_Caret_Period_Asterisk_Dollar 1.9358036858068528 ns/iter 1.866403696688824 ns/iter 1.04
Regex_Caret_Group_Period_Asterisk_Group_Dollar 1.7495811061738331 ns/iter 1.9500187982661896 ns/iter 0.90
Regex_Caret_X_Hyphen 6.25006445820008 ns/iter 7.755147078500423 ns/iter 0.81
Regex_Period_Md_Dollar 18.480472695204696 ns/iter 22.144321256408364 ns/iter 0.83
Regex_Caret_Slash_Period_Asterisk 5.390323460716302 ns/iter 6.8582553208049335 ns/iter 0.79
Regex_Caret_Period_Range_Dollar 2.448483219589357 ns/iter 2.862165539520193 ns/iter 0.86
Regex_Nested_Backtrack 27.073605026189643 ns/iter 39.62724285480656 ns/iter 0.68
JSON_Array_Of_Objects_Unique 387.64022481903885 ns/iter 495.58745684946734 ns/iter 0.78
JSON_Parse_1 7538.130868898774 ns/iter 8377.534589243396 ns/iter 0.90
JSON_Parse_Real 8143.692679587244 ns/iter 8971.824224373126 ns/iter 0.91
JSON_Parse_Decimal 8068.659760356272 ns/iter 9150.109405189403 ns/iter 0.88
JSON_Parse_Schema_ISO_Language 4282314.896552154 ns/iter 5466469.086021182 ns/iter 0.78
JSON_Parse_Integer 4884.172293866804 ns/iter 5881.674096380462 ns/iter 0.83
JSON_Parse_String_NonSSO_Plain 7614.202097104267 ns/iter 10266.767164271234 ns/iter 0.74
JSON_Parse_String_SSO_Plain 2851.032536270215 ns/iter 3349.8936199055397 ns/iter 0.85
JSON_Parse_String_Escape_Heavy 21561.64714360234 ns/iter 25195.893733415127 ns/iter 0.86
JSON_Parse_Object_Short_Keys 8906.588711760793 ns/iter 10728.482203748865 ns/iter 0.83
JSON_Parse_Object_Scalar_Properties 4613.647396630814 ns/iter 5926.2851418561895 ns/iter 0.78
JSON_Parse_Object_Array_Properties 7553.369278049626 ns/iter 8911.068307006528 ns/iter 0.85
JSON_Parse_Object_Object_Properties 7757.441580682296 ns/iter 9380.45980138424 ns/iter 0.83
JSON_Parse_Nested_Containers 62462.29402905572 ns/iter 73968.57067171313 ns/iter 0.84
JSON_From_String_Copy 25.187562900402234 ns/iter 27.87635592004141 ns/iter 0.90
JSON_From_String_Temporary 19.340586072146344 ns/iter 24.132061630238578 ns/iter 0.80
JSON_Number_To_Double 37.234324339479095 ns/iter 48.99795137692196 ns/iter 0.76
JSON_Object_At_Last_Key/8 4.3323422393898525 ns/iter 5.115720533879215 ns/iter 0.85
JSON_Object_At_Last_Key/32 13.107832739300806 ns/iter 15.177704596217708 ns/iter 0.86
JSON_Object_At_Last_Key/128 56.44987533084733 ns/iter 67.14898901780997 ns/iter 0.84
JSON_Object_At_Last_Key/512 192.17750282468023 ns/iter 267.2938577505039 ns/iter 0.72
JSON_Fast_Hash_Helm_Chart_Lock 60.16543345885684 ns/iter 79.4818104717342 ns/iter 0.76
JSON_Equality_Helm_Chart_Lock 145.47601536286138 ns/iter 192.276016218362 ns/iter 0.76
JSON_Divisible_By_Decimal 176.61136289245636 ns/iter 281.630393829609 ns/iter 0.63
JSON_String_Equal/10 7.495301151364404 ns/iter 10.019221712187496 ns/iter 0.75
JSON_String_Equal/100 7.176004445256733 ns/iter 9.887759420039021 ns/iter 0.73
JSON_String_Equal_Small_By_Perfect_Hash/10 0.34745455240715956 ns/iter 0.42944982486702943 ns/iter 0.81
JSON_String_Equal_Small_By_Runtime_Perfect_Hash/10 3.731755501044223 ns/iter 4.504096080834984 ns/iter 0.83
JSON_String_Fast_Hash/10 2.7398537630357374 ns/iter 2.9618875477008624 ns/iter 0.93
JSON_String_Fast_Hash/100 2.631902712895523 ns/iter 2.402493766446862 ns/iter 1.10
JSON_String_Key_Hash/10 1.7302733339384269 ns/iter 2.3104913708402797 ns/iter 0.75
JSON_String_Key_Hash/100 2.2239192883526737 ns/iter 2.892527792568883 ns/iter 0.77
JSON_Object_Defines_Miss_Same_Length 3.140789787829667 ns/iter 3.3925129299498944 ns/iter 0.93
JSON_Object_Defines_Miss_Too_Small 2.7930962661488805 ns/iter 3.5222027932761764 ns/iter 0.79
JSON_Object_Defines_Miss_Too_Large 2.846798063785398 ns/iter 2.9856923442558805 ns/iter 0.95
Pointer_Object_Traverse 25.626754179974466 ns/iter 33.30306036799355 ns/iter 0.77
Pointer_Object_Try_Traverse 25.703190314230216 ns/iter 33.830795742152084 ns/iter 0.76
Pointer_Push_Back_Pointer_To_Weak_Pointer 191.0020520323461 ns/iter 217.7173906206125 ns/iter 0.88
Pointer_Walker_Schema_ISO_Language 2949167.496031653 ns/iter 2825294.730392474 ns/iter 1.04
Pointer_Maybe_Tracked_Deeply_Nested/0 1330716.6673268855 ns/iter 1211338.027729634 ns/iter 1.10
Pointer_Maybe_Tracked_Deeply_Nested/1 1148262.5474210724 ns/iter 1043338.3862274134 ns/iter 1.10
Pointer_Position_Tracker_Get_Deeply_Nested 348.26208882820396 ns/iter 329.78097732998697 ns/iter 1.06
JSONPath_Descendant_Filter_Nested 1275.3736794903498 ns/iter 1266.1256339639287 ns/iter 1.01
URITemplateRouter_Create 23470.21931629453 ns/iter 27909.840521925536 ns/iter 0.84
URITemplateRouter_Match 192.45021505448975 ns/iter 172.21977926465956 ns/iter 1.12
URITemplateRouter_Match_BasePath 302.13881298455374 ns/iter 199.8314329904546 ns/iter 1.51
URITemplateRouterView_Restore 11878.265380048704 ns/iter 10921.327087666597 ns/iter 1.09
URITemplateRouterView_Match 138.95360970414842 ns/iter 157.36315265758992 ns/iter 0.88
URITemplateRouterView_Match_BasePath 152.55151791057426 ns/iter 169.5313507517467 ns/iter 0.90
URITemplateRouterView_Arguments 538.6672013629113 ns/iter 584.8250650756163 ns/iter 0.92
JSONL_Parse_Large 10030956.485294115 ns/iter 19587980.33333172 ns/iter 0.51
JSONL_Parse_Large_GZIP 11526826.508196658 ns/iter 20804677.945946153 ns/iter 0.55
JSONLD_Catalog_Annotation_List_Populate 994421.2651413968 ns/iter 1290260.912698599 ns/iter 0.77
JSONLD_Catalog_Materialize 4943121.681159535 ns/iter 7687353.365383842 ns/iter 0.64
HTML_Build_Table_100000 39817507.3529434 ns/iter 54946766.59999414 ns/iter 0.72
HTML_Render_Table_100000 1623083.9694653999 ns/iter 2578806.365030522 ns/iter 0.63
GZIP_Compress_ISO_Language_Set_3_Locations 27214898.148149252 ns/iter 38222685.22222 ns/iter 0.71
GZIP_Decompress_ISO_Language_Set_3_Locations 3192219.0814479175 ns/iter 4611705.035971282 ns/iter 0.69
GZIP_Compress_ISO_Language_Set_3_Schema 3408210.070175418 ns/iter 1942147.2513090877 ns/iter 1.75
GZIP_Decompress_ISO_Language_Set_3_Schema 307963.1815273783 ns/iter 321999.9802027535 ns/iter 0.96
JOSE_VerifySignature_RS256 22010.90893695763 ns/iter 24227.70032696815 ns/iter 0.91
JOSE_VerifySignature_ES512 1199734.1065290375 ns/iter 1282855.83272724 ns/iter 0.94

This comment was automatically generated by workflow using github-action-benchmark.

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Benchmark (linux/gcc)

Details
Benchmark suite Current: 915a07e Previous: c2e9865 Ratio
JOSE_VerifySignature_RS256 22441.902168705557 ns/iter 24332.736914650617 ns/iter 0.92
JOSE_VerifySignature_ES512 577703.9908789606 ns/iter 669589.4454628427 ns/iter 0.86
GZIP_Compress_ISO_Language_Set_3_Locations 36415647.42104875 ns/iter 39359847.94444873 ns/iter 0.93
GZIP_Decompress_ISO_Language_Set_3_Locations 4442056.6751596425 ns/iter 4065051.732558073 ns/iter 1.09
GZIP_Compress_ISO_Language_Set_3_Schema 2022984.8294796397 ns/iter 2267437.6363636088 ns/iter 0.89
GZIP_Decompress_ISO_Language_Set_3_Schema 379786.20672813297 ns/iter 278587.07594935404 ns/iter 1.36
HTML_Build_Table_100000 64839496.000000834 ns/iter 70184459.50000115 ns/iter 0.92
HTML_Render_Table_100000 2039817.2005418 ns/iter 2121222.773134425 ns/iter 0.96
JSONLD_Catalog_Annotation_List_Populate 1314857.8827976773 ns/iter 1307068.9999999593 ns/iter 1.01
JSONLD_Catalog_Materialize 8059494.682352659 ns/iter 7021091.4554450875 ns/iter 1.15
JSONL_Parse_Large 14145696.699999917 ns/iter 13573306.61538579 ns/iter 1.04
JSONL_Parse_Large_GZIP 15472397.95555571 ns/iter 15056615.978722977 ns/iter 1.03
URITemplateRouter_Create 30873.65721467448 ns/iter 29808.719942161613 ns/iter 1.04
URITemplateRouter_Match 164.72226073557874 ns/iter 166.39454647465786 ns/iter 0.99
URITemplateRouter_Match_BasePath 186.6809728433928 ns/iter 192.68106335684502 ns/iter 0.97
URITemplateRouterView_Restore 8601.580712009732 ns/iter 9908.403712137215 ns/iter 0.87
URITemplateRouterView_Match 124.84531072604223 ns/iter 125.97983638702715 ns/iter 0.99
URITemplateRouterView_Match_BasePath 144.06575020667466 ns/iter 144.15944448903707 ns/iter 1.00
URITemplateRouterView_Arguments 472.54541332820247 ns/iter 461.9213585850908 ns/iter 1.02
JSONPath_Descendant_Filter_Nested 1774.901293106775 ns/iter 1826.9056429587172 ns/iter 0.97
Pointer_Object_Traverse 30.199043981906744 ns/iter 32.15207092258771 ns/iter 0.94
Pointer_Object_Try_Traverse 25.481207288921407 ns/iter 26.050690592014778 ns/iter 0.98
Pointer_Push_Back_Pointer_To_Weak_Pointer 163.78698314948394 ns/iter 156.26097442758456 ns/iter 1.05
Pointer_Walker_Schema_ISO_Language 3096676.884444302 ns/iter 3092937.1724137757 ns/iter 1.00
Pointer_Maybe_Tracked_Deeply_Nested/0 1862104.8679243894 ns/iter 1898954.994565209 ns/iter 0.98
Pointer_Maybe_Tracked_Deeply_Nested/1 1718513.507352735 ns/iter 1644827.8289787795 ns/iter 1.04
Pointer_Position_Tracker_Get_Deeply_Nested 417.48777235001774 ns/iter 570.642148039361 ns/iter 0.73
JSON_Array_Of_Objects_Unique 435.0218743838661 ns/iter 403.2760678454962 ns/iter 1.08
JSON_Parse_1 10074.131604612425 ns/iter 9724.859487081148 ns/iter 1.04
JSON_Parse_Real 8021.633540513905 ns/iter 7759.906138307172 ns/iter 1.03
JSON_Parse_Decimal 13120.296199213146 ns/iter 11194.887807761566 ns/iter 1.17
JSON_Parse_Schema_ISO_Language 6762367.673076142 ns/iter 6722445.428571129 ns/iter 1.01
JSON_Parse_Integer 5776.125828032339 ns/iter 5717.399208548561 ns/iter 1.01
JSON_Parse_String_NonSSO_Plain 12116.471321652974 ns/iter 11948.545437509069 ns/iter 1.01
JSON_Parse_String_SSO_Plain 5106.109989078781 ns/iter 4657.100362307074 ns/iter 1.10
JSON_Parse_String_Escape_Heavy 25861.034678670076 ns/iter 24620.48070422555 ns/iter 1.05
JSON_Parse_Object_Short_Keys 13668.09361768946 ns/iter 14136.134016046388 ns/iter 0.97
JSON_Parse_Object_Scalar_Properties 7091.668660884174 ns/iter 7150.679229694502 ns/iter 0.99
JSON_Parse_Object_Array_Properties 12493.516403852143 ns/iter 12671.741880619913 ns/iter 0.99
JSON_Parse_Object_Object_Properties 12294.103663164673 ns/iter 12029.569476944904 ns/iter 1.02
JSON_Parse_Nested_Containers 102971.57084249647 ns/iter 100057.0385494057 ns/iter 1.03
JSON_From_String_Copy 18.13356407610382 ns/iter 19.70145964848231 ns/iter 0.92
JSON_From_String_Temporary 15.40812200120132 ns/iter 16.320591702531374 ns/iter 0.94
JSON_Number_To_Double 20.609185212212964 ns/iter 19.457215417520878 ns/iter 1.06
JSON_Object_At_Last_Key/8 3.818637633986932 ns/iter 4.200811807205807 ns/iter 0.91
JSON_Object_At_Last_Key/32 11.885105507311819 ns/iter 13.37655502909394 ns/iter 0.89
JSON_Object_At_Last_Key/128 48.70315788913404 ns/iter 47.20245657082939 ns/iter 1.03
JSON_Object_At_Last_Key/512 353.584521192826 ns/iter 277.7874411615759 ns/iter 1.27
JSON_Fast_Hash_Helm_Chart_Lock 61.49052447588639 ns/iter 72.91374259331519 ns/iter 0.84
JSON_Equality_Helm_Chart_Lock 159.02784980232974 ns/iter 167.91521185602022 ns/iter 0.95
JSON_Divisible_By_Decimal 257.34161812863664 ns/iter 247.10401790367246 ns/iter 1.04
JSON_String_Equal/10 5.394797585606839 ns/iter 5.318901948143523 ns/iter 1.01
JSON_String_Equal/100 6.001440843283442 ns/iter 6.020760030821431 ns/iter 1.00
JSON_String_Equal_Small_By_Perfect_Hash/10 0.6246380601381972 ns/iter 0.711589413094199 ns/iter 0.88
JSON_String_Equal_Small_By_Runtime_Perfect_Hash/10 25.21241377210604 ns/iter 22.03822800131175 ns/iter 1.14
JSON_String_Fast_Hash/10 2.264121667305271 ns/iter 2.464036949981108 ns/iter 0.92
JSON_String_Fast_Hash/100 2.2639947358005004 ns/iter 2.4644245882382667 ns/iter 0.92
JSON_String_Key_Hash/10 1.24714335042716 ns/iter 1.084555840899372 ns/iter 1.15
JSON_String_Key_Hash/100 12.4465100966816 ns/iter 14.751992989812805 ns/iter 0.84
JSON_Object_Defines_Miss_Same_Length 3.11424687429962 ns/iter 3.1675092444209123 ns/iter 0.98
JSON_Object_Defines_Miss_Too_Small 3.1163644846897243 ns/iter 3.518422191255207 ns/iter 0.89
JSON_Object_Defines_Miss_Too_Large 3.1159439250734025 ns/iter 3.169172006447286 ns/iter 0.98
Regex_Lower_S_Or_Upper_S_Asterisk 0.9429900030281383 ns/iter 1.0565253085838553 ns/iter 0.89
Regex_Caret_Lower_S_Or_Upper_S_Asterisk_Dollar 0.6226831446786023 ns/iter 0.7035194575578043 ns/iter 0.89
Regex_Period_Asterisk 0.9378868226812145 ns/iter 1.0571858373889613 ns/iter 0.89
Regex_Group_Period_Asterisk_Group 0.6236011931207555 ns/iter 0.7037792868251931 ns/iter 0.89
Regex_Period_Plus 0.9357200049283695 ns/iter 1.0563654741103086 ns/iter 0.89
Regex_Period 0.6232075280714728 ns/iter 0.7036975365405713 ns/iter 0.89
Regex_Caret_Period_Plus_Dollar 0.934587392540639 ns/iter 1.0552290457610425 ns/iter 0.89
Regex_Caret_Group_Period_Plus_Group_Dollar 0.6232065751517003 ns/iter 0.7036268732417027 ns/iter 0.89
Regex_Caret_Period_Asterisk_Dollar 0.9355697933074487 ns/iter 1.055735731422408 ns/iter 0.89
Regex_Caret_Group_Period_Asterisk_Group_Dollar 0.6234008684120159 ns/iter 0.7038612321710441 ns/iter 0.89
Regex_Caret_X_Hyphen 4.36468433614005 ns/iter 4.220696234255553 ns/iter 1.03
Regex_Period_Md_Dollar 29.225143532414517 ns/iter 33.08054220504927 ns/iter 0.88
Regex_Caret_Slash_Period_Asterisk 4.685235919178105 ns/iter 4.576872175342836 ns/iter 1.02
Regex_Caret_Period_Range_Dollar 1.2467990071435684 ns/iter 1.406816973212099 ns/iter 0.89
Regex_Nested_Backtrack 37.872601147713866 ns/iter 40.77162847499934 ns/iter 0.93

This comment was automatically generated by workflow using github-action-benchmark.

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Benchmark (windows/msvc)

Details
Benchmark suite Current: 915a07e Previous: c2e9865 Ratio
Regex_Lower_S_Or_Upper_S_Asterisk 5.353179999999611 ns/iter 5.03754017857107 ns/iter 1.06
Regex_Caret_Lower_S_Or_Upper_S_Asterisk_Dollar 5.017636999998558 ns/iter 4.963781250000109 ns/iter 1.01
Regex_Period_Asterisk 5.02159200000051 ns/iter 4.9935553571417906 ns/iter 1.01
Regex_Group_Period_Asterisk_Group 5.019087500000653 ns/iter 4.971241000000646 ns/iter 1.01
Regex_Period_Plus 5.040166000001136 ns/iter 4.626739965685756 ns/iter 1.09
Regex_Period 5.335814000000028 ns/iter 4.698793862656079 ns/iter 1.14
Regex_Caret_Period_Plus_Dollar 5.023780999999872 ns/iter 4.770987064221962 ns/iter 1.05
Regex_Caret_Group_Period_Plus_Group_Dollar 5.342751999999109 ns/iter 5.158830999998827 ns/iter 1.04
Regex_Caret_Period_Asterisk_Dollar 5.330334000000221 ns/iter 5.230208999998922 ns/iter 1.02
Regex_Caret_Group_Period_Asterisk_Group_Dollar 5.0245700000004945 ns/iter 5.1189690000001065 ns/iter 0.98
Regex_Caret_X_Hyphen 8.477029017858024 ns/iter 8.261820312500033 ns/iter 1.03
Regex_Period_Md_Dollar 45.290725000000975 ns/iter 57.24526785712669 ns/iter 0.79
Regex_Caret_Slash_Period_Asterisk 7.8592265625004085 ns/iter 7.547571428571891 ns/iter 1.04
Regex_Caret_Period_Range_Dollar 5.96320446428576 ns/iter 5.4115035714273425 ns/iter 1.10
Regex_Nested_Backtrack 55.15266964284901 ns/iter 77.40322544643264 ns/iter 0.71
JSON_Array_Of_Objects_Unique 590.9884999998667 ns/iter 663.0828571429349 ns/iter 0.89
JSON_Parse_1 8920.464194356495 ns/iter 9371.53762706458 ns/iter 0.95
JSON_Parse_Real 16034.939966115719 ns/iter 18050.946883454675 ns/iter 0.89
JSON_Parse_Decimal 11895.287500002332 ns/iter 11346.490625001592 ns/iter 1.05
JSON_Parse_Schema_ISO_Language 8088782.6666639745 ns/iter 8514908.888888486 ns/iter 0.95
JSON_Parse_Integer 6236.1419642858855 ns/iter 5899.963392857493 ns/iter 1.06
JSON_Parse_String_NonSSO_Plain 7961.029638261126 ns/iter 7860.797991072437 ns/iter 1.01
JSON_Parse_String_SSO_Plain 3611.434265295953 ns/iter 3809.528197271075 ns/iter 0.95
JSON_Parse_String_Escape_Heavy 21985.52583118949 ns/iter 21779.36874999631 ns/iter 1.01
JSON_Parse_Object_Short_Keys 13450.791071428674 ns/iter 13230.142857143588 ns/iter 1.02
JSON_Parse_Object_Scalar_Properties 6912.538392857722 ns/iter 6852.501116070593 ns/iter 1.01
JSON_Parse_Object_Array_Properties 11489.287500000142 ns/iter 11541.014285715586 ns/iter 1.00
JSON_Parse_Object_Object_Properties 11714.609375001572 ns/iter 11738.98281250274 ns/iter 1.00
JSON_Parse_Nested_Containers 79450.69196428584 ns/iter 82847.32142855538 ns/iter 0.96
JSON_From_String_Copy 63.66464285712985 ns/iter 66.41684821427621 ns/iter 0.96
JSON_From_String_Temporary 59.84442857140947 ns/iter 84.49290178571545 ns/iter 0.71
JSON_Number_To_Double 121.69337500001376 ns/iter 141.06613432738035 ns/iter 0.86
JSON_Object_At_Last_Key/8 7.282068749999229 ns/iter 7.673453571428013 ns/iter 0.95
JSON_Object_At_Last_Key/32 23.584412683207987 ns/iter 29.06512322199633 ns/iter 0.81
JSON_Object_At_Last_Key/128 91.94253607399716 ns/iter 93.74550920776912 ns/iter 0.98
JSON_Object_At_Last_Key/512 425.4139347744505 ns/iter 434.9490625000385 ns/iter 0.98
JSON_Fast_Hash_Helm_Chart_Lock 101.31579687502779 ns/iter 147.94434356641221 ns/iter 0.68
JSON_Equality_Helm_Chart_Lock 209.7571669751702 ns/iter 204.89407186550744 ns/iter 1.02
JSON_Divisible_By_Decimal 300.0117053558773 ns/iter 392.22656250004206 ns/iter 0.76
JSON_String_Equal/10 10.411237453522652 ns/iter 10.063073437500236 ns/iter 1.03
JSON_String_Equal/100 11.638092187499893 ns/iter 11.657846428570501 ns/iter 1.00
JSON_String_Equal_Small_By_Perfect_Hash/10 2.5319996623523284 ns/iter 2.147161874999881 ns/iter 1.18
JSON_String_Equal_Small_By_Runtime_Perfect_Hash/10 14.590556854509073 ns/iter 14.845013773013235 ns/iter 0.98
JSON_String_Fast_Hash/10 6.651686607142437 ns/iter 6.464222321428435 ns/iter 1.03
JSON_String_Fast_Hash/100 6.620973214286404 ns/iter 6.614464285714153 ns/iter 1.00
JSON_String_Key_Hash/10 5.391339285714431 ns/iter 4.963574107143083 ns/iter 1.09
JSON_String_Key_Hash/100 11.926257142858633 ns/iter 10.989365624997305 ns/iter 1.09
JSON_Object_Defines_Miss_Same_Length 3.8239486607137354 ns/iter 3.8862712053574655 ns/iter 0.98
JSON_Object_Defines_Miss_Too_Small 4.089437864445768 ns/iter 4.503230624999333 ns/iter 0.91
JSON_Object_Defines_Miss_Too_Large 3.8056949932030912 ns/iter 3.897338169642138 ns/iter 0.98
Pointer_Object_Traverse 71.0409464285736 ns/iter 65.49542410714893 ns/iter 1.08
Pointer_Object_Try_Traverse 71.40092857144153 ns/iter 68.7900892857028 ns/iter 1.04
Pointer_Push_Back_Pointer_To_Weak_Pointer 202.65687488138377 ns/iter 169.08792410715378 ns/iter 1.20
Pointer_Walker_Schema_ISO_Language 14077956.000000995 ns/iter 12452246.000002561 ns/iter 1.13
Pointer_Maybe_Tracked_Deeply_Nested/0 2457748.594377036 ns/iter 2498647.4576271037 ns/iter 0.98
Pointer_Maybe_Tracked_Deeply_Nested/1 3783953.631284793 ns/iter 3715191.9786093184 ns/iter 1.02
Pointer_Position_Tracker_Get_Deeply_Nested 545.788392857105 ns/iter 596.7808035714585 ns/iter 0.91
JSONPath_Descendant_Filter_Nested 2396.363928571483 ns/iter 2558.176898937547 ns/iter 0.94
URITemplateRouter_Create 41304.689222924055 ns/iter 40919.40577351352 ns/iter 1.01
URITemplateRouter_Match 236.53597806512258 ns/iter 229.79625783525418 ns/iter 1.03
URITemplateRouter_Match_BasePath 269.84841160039826 ns/iter 262.31496428571126 ns/iter 1.03
URITemplateRouterView_Restore 32468.968749991436 ns/iter 24556.982142858684 ns/iter 1.32
URITemplateRouterView_Match 179.6299138145085 ns/iter 174.0526187981397 ns/iter 1.03
URITemplateRouterView_Match_BasePath 203.26714940767764 ns/iter 197.26785689887774 ns/iter 1.03
URITemplateRouterView_Arguments 542.3578571428119 ns/iter 598.7358035714659 ns/iter 0.91
JSONL_Parse_Large 32708427.27272338 ns/iter 32759366.66667197 ns/iter 1.00
JSONL_Parse_Large_GZIP 33458895.00000112 ns/iter 33807323.80952352 ns/iter 0.99
JSONLD_Catalog_Annotation_List_Populate 2771348.106061093 ns/iter 2807780.7228921857 ns/iter 0.99
JSONLD_Catalog_Materialize 9056420.000000192 ns/iter 9177658.666667413 ns/iter 0.99
HTML_Build_Table_100000 90662328.57143016 ns/iter 92631071.42857864 ns/iter 0.98
HTML_Render_Table_100000 8290887.77777795 ns/iter 8200256.000000081 ns/iter 1.01
GZIP_Compress_ISO_Language_Set_3_Locations 36309004.99999826 ns/iter 38217711.764700115 ns/iter 0.95
GZIP_Decompress_ISO_Language_Set_3_Locations 10067298.437501648 ns/iter 10754879.687500108 ns/iter 0.94
GZIP_Compress_ISO_Language_Set_3_Schema 2102450.312500537 ns/iter 2395345.937500082 ns/iter 0.88
GZIP_Decompress_ISO_Language_Set_3_Schema 650898.2142856874 ns/iter 595651.2500000192 ns/iter 1.09
JOSE_VerifySignature_RS256 21229.72259300465 ns/iter 24173.274999993413 ns/iter 0.88
JOSE_VerifySignature_ES512 1535043.975903695 ns/iter 1541312.946428722 ns/iter 1.00

This comment was automatically generated by workflow using github-action-benchmark.

@jviotti
jviotti merged commit ab575bb into main Jul 20, 2026
12 checks passed
@jviotti
jviotti deleted the uri-unescape-form branch July 20, 2026 11:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant