diff options
author | Dirk Hohndel <dirk@hohndel.org> | 2014-11-20 14:30:44 -0800 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2014-11-20 14:30:44 -0800 |
commit | 2f7a7f3e6ac3d741bebd9e31f63d0bcf3f237774 (patch) | |
tree | 93a1d87066c08e8dae788e7455a18d7fed040103 | |
parent | 21675de534243a65fdd19e28be1145e5f0e2d294 (diff) | |
download | subsurface-2f7a7f3e6ac3d741bebd9e31f63d0bcf3f237774.tar.gz |
Prevent garbage from being saved in the userid field
It seems that in some scenarios we end up with a string that isn't NUL
terminated and that results in garbage being stored as userid. This patch
is a little brute force but it fixes the problem even if a previous
version os Subsurface ended up adding other text to the end of the userid.
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
-rw-r--r-- | dive.c | 2 | ||||
-rw-r--r-- | save-git.c | 2 | ||||
-rw-r--r-- | save-xml.c | 2 |
3 files changed, 4 insertions, 2 deletions
@@ -2720,6 +2720,8 @@ void set_save_userid_local(short value) void set_userid(char *rUserId) { prefs.userid = strdup(rUserId); + if (strlen(prefs.userid) > 30) + prefs.userid[30]='\0'; } int average_depth(struct diveplan *dive) diff --git a/save-git.c b/save-git.c index 288917a29..8cde454f2 100644 --- a/save-git.c +++ b/save-git.c @@ -754,7 +754,7 @@ static void save_userid(void *_b) { struct membuffer *b = _b; if (prefs.save_userid_local) - put_format(b, "userid %30s", prefs.userid); + put_format(b, "userid %30s\n", prefs.userid); } static void save_one_device(void *_b, const char *model, uint32_t deviceid, diff --git a/save-xml.c b/save-xml.c index cf7ccfec7..c9adf5307 100644 --- a/save-xml.c +++ b/save-xml.c @@ -520,7 +520,7 @@ void save_dives_buffer(struct membuffer *b, const bool select_only) put_format(b, "<divelog program='subsurface' version='%d'>\n<settings>\n", VERSION); if (prefs.save_userid_local) - put_format(b, " <userid>%s</userid>\n", prefs.userid); + put_format(b, " <userid>%30s</userid>\n", prefs.userid); /* save the dive computer nicknames, if any */ call_for_each_dc(b, save_one_device); |