diff options
author | Bruce Momjian <bruce@momjian.us> | 2015-02-02 10:00:44 -0500 |
---|---|---|
committer | Bruce Momjian <bruce@momjian.us> | 2015-02-02 10:00:49 -0500 |
commit | 1628a0bbfa2e30cd52daaa3ae78961d301adad2f (patch) | |
tree | c3f60163366d32652ca6f199dca0230da3af6ea4 /src | |
parent | e87dedc0c492a4dcc45ec4e424027a1180d7ebb6 (diff) | |
download | postgresql-1628a0bbfa2e30cd52daaa3ae78961d301adad2f.tar.gz postgresql-1628a0bbfa2e30cd52daaa3ae78961d301adad2f.zip |
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
Diffstat (limited to 'src')
-rw-r--r-- | src/backend/utils/adt/formatting.c | 4 |
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); |