diff s3/s3_uploader.c @ 201:6cdee35a7ba9

[MrJuneJune] notes
author MrJuneJune <me@mrjunejune.com>
date Sun, 15 Feb 2026 07:07:50 -0800
parents 83f16548ba41
children 240337164a80
line wrap: on
line diff
--- a/s3/s3_uploader.c	Sat Feb 14 16:32:24 2026 -0800
+++ b/s3/s3_uploader.c	Sun Feb 15 07:07:50 2026 -0800
@@ -388,40 +388,23 @@
   char expires_str[16];
   snprintf(expires_str, sizeof(expires_str), "%d", expires_seconds);
 
+  // URL-encode signed headers (semicolon becomes %3B)
+  char *encoded_signed_headers = s3__uri_encode_strict(signed_headers, p_arena);
+
   size_t query_len = 1024 + strlen(encoded_credential);
   char *canonical_query = Dowa_Arena_Allocate(p_arena, query_len);
 
-  if (content_type && strcmp(method, "PUT") == 0)
-  {
-    char *encoded_content_type = s3__uri_encode_strict(content_type, p_arena);
-    snprintf(canonical_query, query_len,
-             "X-Amz-Algorithm=%s"
-             "&X-Amz-Credential=%s"
-             "&X-Amz-Date=%s"
-             "&X-Amz-Expires=%s"
-             "&X-Amz-SignedHeaders=%s"
-             "&x-amz-content-type=%s",
-             S3_ALGORITHM,
-             encoded_credential,
-             ts.datetime,
-             expires_str,
-             signed_headers,
-             encoded_content_type);
-  }
-  else
-  {
-    snprintf(canonical_query, query_len,
-             "X-Amz-Algorithm=%s"
-             "&X-Amz-Credential=%s"
-             "&X-Amz-Date=%s"
-             "&X-Amz-Expires=%s"
-             "&X-Amz-SignedHeaders=%s",
-             S3_ALGORITHM,
-             encoded_credential,
-             ts.datetime,
-             expires_str,
-             signed_headers);
-  }
+  snprintf(canonical_query, query_len,
+           "X-Amz-Algorithm=%s"
+           "&X-Amz-Credential=%s"
+           "&X-Amz-Date=%s"
+           "&X-Amz-Expires=%s"
+           "&X-Amz-SignedHeaders=%s",
+           S3_ALGORITHM,
+           encoded_credential,
+           ts.datetime,
+           expires_str,
+           encoded_signed_headers);
 
   // Build canonical headers
   size_t headers_len = 256 + strlen(host) + (content_type ? strlen(content_type) : 0);