[gnumeric] REPLACEB: Fix copying of bytes after those being replaced.
- From: Morten Welinder <mortenw src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnumeric] REPLACEB: Fix copying of bytes after those being replaced.
- Date: Wed, 1 Apr 2015 23:16:41 +0000 (UTC)
commit 1e3af7b6c39b5e0bc5d3e26c8269316c3e939789
Author: Morten Welinder <terra gnome org>
Date: Wed Apr 1 19:16:31 2015 -0400
REPLACEB: Fix copying of bytes after those being replaced.
NEWS | 1 +
plugins/fn-string/ChangeLog | 5 +++++
plugins/fn-string/functions.c | 5 +++--
3 files changed, 9 insertions(+), 2 deletions(-)
---
diff --git a/NEWS b/NEWS
index 330566c..39d8e64 100644
--- a/NEWS
+++ b/NEWS
@@ -24,6 +24,7 @@ Morten:
* Improve xlsx roundtrip of GOStyle.
* Improve reading of xlsx theme colours.
* Plug leaks.
+ * Fix REPLACEB problem. [#747210]
--------------------------------------------------------------------------
Gnumeric 1.12.21
diff --git a/plugins/fn-string/ChangeLog b/plugins/fn-string/ChangeLog
index d759f9b..1c6e84e 100644
--- a/plugins/fn-string/ChangeLog
+++ b/plugins/fn-string/ChangeLog
@@ -1,3 +1,8 @@
+2015-04-01 Morten Welinder <terra gnome org>
+
+ * functions.c (gnumeric_replaceb): Copy from the right string.
+ Ensure room for terminating 0. Fixes #747210.
+
2015-03-19 Morten Welinder <terra gnome org>
* functions.c (gnumeric_midb, gnumeric_replaceb): Fix length
diff --git a/plugins/fn-string/functions.c b/plugins/fn-string/functions.c
index 89813cf..dc127df 100644
--- a/plugins/fn-string/functions.c
+++ b/plugins/fn-string/functions.c
@@ -923,13 +923,14 @@ gnumeric_replaceb (GnmFuncEvalInfo *ei, GnmValue const * const *argv)
if ((ipos > slen) ||
(ipos + ilen > slen) ||
((gunichar)-1 == g_utf8_get_char_validated (old + ipos, -1)) ||
+ ((gunichar)-1 == g_utf8_get_char_validated (old + ipos + ilen, -1)) ||
!g_utf8_validate (old + ipos, ilen, NULL))
return value_new_error_VALUE (ei->pos);
newlen = strlen (new);
- res = g_malloc (slen - ilen + newlen);
+ res = g_malloc (slen - ilen + newlen + 1);
memcpy (res, old, ipos);
memcpy (res + ipos, new, newlen);
- memcpy (res + ipos + newlen, new + ipos + ilen + 1, slen - ipos - ilen);
+ memcpy (res + ipos + newlen, old + ipos + ilen, slen - ipos - ilen + 1);
return value_new_string_nocopy (res);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]