Don't call fwrite() with len == 0 when writing out relcache init file.
authorAndres Freund <andres@anarazel.de>
Wed, 23 Mar 2022 20:05:25 +0000 (13:05 -0700)
committerAndres Freund <andres@anarazel.de>
Wed, 23 Mar 2022 20:05:25 +0000 (13:05 -0700)
Noticed via -fsanitize=undefined.

Backpatch to all branches, for the same reasons as 46ab07ffda9.

Discussion: https://postgr.es/m/20220323173537.ll7klrglnp4gn2um@alap3.anarazel.de
Backpatch: 10-

src/backend/utils/cache/relcache.c

index fbd11883e17b8dde702863ffab4972217e9f6f71..3d05297b0d9093d0bdda0bc729240226975f5d84 100644 (file)
@@ -6528,7 +6528,7 @@ write_item(const void *data, Size len, FILE *fp)
 {
    if (fwrite(&len, 1, sizeof(len), fp) != sizeof(len))
        elog(FATAL, "could not write init file");
-   if (fwrite(data, 1, len, fp) != len)
+   if (len > 0 && fwrite(data, 1, len, fp) != len)
        elog(FATAL, "could not write init file");
 }