]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
qrcode-util: avoid memleak in error path
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Mon, 28 Oct 2024 12:45:40 +0000 (13:45 +0100)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Tue, 29 Oct 2024 08:41:54 +0000 (09:41 +0100)
src/shared/qrcode-util.c

index afb2875aa0613c71dde3cb076535f3c12d266418..da88d80d03c355945bb18b80ce80d5f2f02b0ad9 100644 (file)
@@ -173,6 +173,8 @@ static void write_qrcode(FILE *output, QRcode *qr, unsigned int row, unsigned in
         fflush(output);
 }
 
+DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(QRcode*, sym_QRcode_free, NULL);
+
 int print_qrcode_full(
                 FILE *out,
                 const char *header,
@@ -183,7 +185,6 @@ int print_qrcode_full(
                 unsigned tty_height,
                 bool check_tty) {
 
-        QRcode* qr;
         int r;
 
         /* If this is not a UTF-8 system or ANSI colors aren't supported/disabled don't print any QR
@@ -197,7 +198,8 @@ int print_qrcode_full(
         if (r < 0)
                 return r;
 
-        qr = sym_QRcode_encodeString(string, 0, QR_ECLEVEL_L, QR_MODE_8, 1);
+        _cleanup_(sym_QRcode_freep) QRcode *qr =
+                sym_QRcode_encodeString(string, 0, QR_ECLEVEL_L, QR_MODE_8, 1);
         if (!qr)
                 return log_oom_debug();
 
@@ -231,7 +233,6 @@ int print_qrcode_full(
         write_qrcode(out, qr, row, column);
         fputc('\n', out);
 
-        sym_QRcode_free(qr);
         return 0;
 }
 #endif