summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruce Momjian2015-02-02 15:00:44 +0000
committerBruce Momjian2015-02-02 15:00:49 +0000
commit1628a0bbfa2e30cd52daaa3ae78961d301adad2f (patch)
treec3f60163366d32652ca6f199dca0230da3af6ea4
parente87dedc0c492a4dcc45ec4e424027a1180d7ebb6 (diff)
to_char(): prevent accesses beyond the allocated buffer
Previously very long field masks for floats could access memory beyond the existing buffer allocated to hold the result. Reported by Andres Freund and Peter Geoghegan. Backpatch to all supported versions. Security: CVE-2015-0241
-rw-r--r--src/backend/utils/adt/formatting.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/backend/utils/adt/formatting.c b/src/backend/utils/adt/formatting.c
index d5ff246c7bd..7521348af11 100644
--- a/src/backend/utils/adt/formatting.c
+++ b/src/backend/utils/adt/formatting.c
@@ -4428,7 +4428,9 @@ NUM_numpart_to_char(NUMProc *Np, int id)
Np->num_in = TRUE;
}
}
- ++Np->number_p;
+ /* do no exceed string length */
+ if (*Np->number_p)
+ ++Np->number_p;
}
end = Np->num_count + (Np->out_pre_spaces ? 1 : 0) + (IS_DECIMAL(Np->Num) ? 1 : 0);