Merge r256537 from head:

Make getutxent(3) more robust against bad utx.log files. Whenever we read
  zeroes, don't stop processing the file, but read until its end or valid
  data.

  In collaboration with:	ed

Approved by:	re (kib)
This commit is contained in:
glebius 2013-10-29 09:23:51 +00:00
parent 492a1ca90c
commit 5d5c0c1a43

View File

@ -122,9 +122,20 @@ getfutxent(struct futx *fu)
if (udb == UTXDB_LOG) {
uint16_t len;
retry:
if (fread(&len, sizeof(len), 1, uf) != 1)
return (-1);
len = be16toh(len);
if (len == 0) {
/*
* XXX: Though zero-size records are valid in theory,
* they can never occur in practice. Zero-size records
* indicate file corruption. Seek one byte forward, to
* see if we can find a record there.
*/
ungetc('\0', uf);
goto retry;
}
if (len > sizeof *fu) {
/* Forward compatibility. */
if (fread(fu, sizeof(*fu), 1, uf) != 1)