Skip to content

Commit 21812d5

Browse files
committed
gh-153621: Expose raw libzstd error code in ZstdError messages
Include the raw error code returned by libzstd in all ZstdError messages, making it easier for users to diagnose compression and decompression issues.
1 parent ed71655 commit 21812d5

1 file changed

Lines changed: 18 additions & 11 deletions

File tree

Modules/_zstd/_zstdmodule.c

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -67,45 +67,52 @@ set_zstd_error(const _zstd_state *state, error_type type, size_t zstd_ret)
6767
}
6868
switch (type) {
6969
case ERR_DECOMPRESS:
70-
msg = "Unable to decompress Zstandard data: %s";
70+
msg = "Unable to decompress Zstandard data: %s (error code %llu)";
7171
break;
7272
case ERR_COMPRESS:
73-
msg = "Unable to compress Zstandard data: %s";
73+
msg = "Unable to compress Zstandard data: %s (error code %llu)";
7474
break;
7575
case ERR_SET_PLEDGED_INPUT_SIZE:
76-
msg = "Unable to set pledged uncompressed content size: %s";
76+
msg = "Unable to set pledged uncompressed content size: %s "
77+
"(error code %llu)";
7778
break;
7879

7980
case ERR_LOAD_D_DICT:
8081
msg = "Unable to load Zstandard dictionary or prefix for "
81-
"decompression: %s";
82+
"decompression: %s (error code %llu)";
8283
break;
8384
case ERR_LOAD_C_DICT:
8485
msg = "Unable to load Zstandard dictionary or prefix for "
85-
"compression: %s";
86+
"compression: %s (error code %llu)";
8687
break;
8788

8889
case ERR_GET_C_BOUNDS:
89-
msg = "Unable to get zstd compression parameter bounds: %s";
90+
msg = "Unable to get zstd compression parameter bounds: %s "
91+
"(error code %llu)";
9092
break;
9193
case ERR_GET_D_BOUNDS:
92-
msg = "Unable to get zstd decompression parameter bounds: %s";
94+
msg = "Unable to get zstd decompression parameter bounds: %s "
95+
"(error code %llu)";
9396
break;
9497
case ERR_SET_C_LEVEL:
95-
msg = "Unable to set zstd compression level: %s";
98+
msg = "Unable to set zstd compression level: %s "
99+
"(error code %llu)";
96100
break;
97101

98102
case ERR_TRAIN_DICT:
99-
msg = "Unable to train the Zstandard dictionary: %s";
103+
msg = "Unable to train the Zstandard dictionary: %s "
104+
"(error code %llu)";
100105
break;
101106
case ERR_FINALIZE_DICT:
102-
msg = "Unable to finalize the Zstandard dictionary: %s";
107+
msg = "Unable to finalize the Zstandard dictionary: %s "
108+
"(error code %llu)";
103109
break;
104110

105111
default:
106112
Py_UNREACHABLE();
107113
}
108-
PyErr_Format(state->ZstdError, msg, ZSTD_getErrorName(zstd_ret));
114+
PyErr_Format(state->ZstdError, msg, ZSTD_getErrorName(zstd_ret),
115+
(unsigned long long)zstd_ret);
109116
}
110117

111118
typedef struct {

0 commit comments

Comments
 (0)