Re: pg_restore crashes passing NULL to strcmp (9.4 rc1)

From: Heikki Linnakangas <hlinnakangas(at)vmware(dot)com>
To: Justin Pryzby <pryzby(at)telsasoft(dot)com>, <pgsql-bugs(at)postgresql(dot)org>
Subject: Re: pg_restore crashes passing NULL to strcmp (9.4 rc1)
Date: 2014-12-08 09:26:03
Message-ID: 54856EAB.9010407@vmware.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

On 12/06/2014 08:11 AM, Justin Pryzby wrote:
> I'm not sure what's wrong with this dump file; I remember copying it with rsync
> some months ago, experiencing the crash, and recopying it, not able to break
> off and go into debugging postgres at that point.
>
> $ dpkg-query -W postgresql-client-9.4
> postgresql-client-9.4 9.4~rc1-1
>
> (gdb) r
> Starting program: /usr/lib/postgresql/9.4/bin/pg_restore /home/pryzbyj/clientdb/ptci.d/ptci.segv
> [Thread debugging using libthread_db enabled]
> Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
>
> Program received signal SIGSEGV, Segmentation fault.
> ReadToc (AH=AH(at)entry=0x55555577b3b0)
> at /build/buildd/postgresql-9.4-9.4~rc1/build/../src/bin/pg_dump/pg_backup_archiver.c:2426
> 2426 /build/buildd/postgresql-9.4-9.4~rc1/build/../src/bin/pg_dump/pg_backup_archiver.c: No such file or directory.
>
> 2422 te->owner = ReadStr(AH);
> 2423 if (AH->version >= K_VERS_1_9)
> 2424 {
> 2425 if (strcmp(ReadStr(AH), "true") == 0)
> 2426 te->withOids = true;
> 2427 else
> 2428 te->withOids = false;
> 2429 }
> 2430 else
> 2431 te->withOids = true;

Hmm. It's a bit hard to believe that the "te->withOids = true"
assignment could've segfaulted. So the line number probably isn't 100%
accurate.

A corrupted dump file can certainly cause a segfault in pg_restore, so
the dump file was probably somehow damaged while copying it with rsync.
Can't say more than that, I'm afraid, without the dump file itself.

> (gdb) p ReadStr(AH)
> $1 = 0x0

That tries reads the *next* string from the dump file, so it's not very
surprising that that fails. The previous ReadStr() call probably failed
already, and it would be more interesting to to see what went wrong there.

- Heikki

In response to

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message Ronan Dunklau 2014-12-08 09:45:57 Dumping database creation options and ACLs
Previous Message Francisco Olarte 2014-12-06 12:28:35 Re: BUG #11986: psql uses pager inside Emacs shell buffer (not a terminal)