From 128b139b173ee19ad77b690d7dfbfcfd34268b38 Mon Sep 17 00:00:00 2001 From: Paul Beckingham Date: Sun, 10 Jun 2012 15:03:56 -0400 Subject: [PATCH] Bug #1016 - Fixed bug #1016, which caused segfaults when importing JSON with annotations that lack description or entry date (thanks to Nicholas Rabenau). --- AUTHORS | 1 + ChangeLog | 2 ++ src/commands/CmdImport.cpp | 6 ++++++ src/en-US.h | 2 ++ 4 files changed, 11 insertions(+) diff --git a/AUTHORS b/AUTHORS index e32b70570..2920d833e 100644 --- a/AUTHORS +++ b/AUTHORS @@ -140,4 +140,5 @@ suggestions: Paul Kishimoto Jeff Schroeder Bryan Kam + Nicholas Rabenau diff --git a/ChangeLog b/ChangeLog index eee227f56..5f0003549 100644 --- a/ChangeLog +++ b/ChangeLog @@ -76,6 +76,8 @@ Bugs + Fixed bug #1008, which failed to remove tasks with the special tag '+nocal' from the calendar report output with 'calendar.details=full' set (thanks to Bryan Kam). + + Fixed bug #1016, which caused segfaults when importing JSON with annotations + that lack description or entry date (thanks to Nicholas Rabenau). ------ old releases ------------------------------ diff --git a/src/commands/CmdImport.cpp b/src/commands/CmdImport.cpp index bc5b53402..abb1c9f6f 100644 --- a/src/commands/CmdImport.cpp +++ b/src/commands/CmdImport.cpp @@ -172,6 +172,12 @@ int CmdImport::execute (std::string& output) json::string* when = (json::string*)annotation->_data["entry"]; json::string* what = (json::string*)annotation->_data["description"]; + if (! when) + throw format (STRING_CMD_IMPORT_NO_ENTRY, *line); + + if (! what) + throw format (STRING_CMD_IMPORT_NO_DESC, *line); + std::string name = "annotation_" + Date (when->_data).toEpochString (); annos.insert (std::make_pair (name, what->_data)); diff --git a/src/en-US.h b/src/en-US.h index c87a6c4c5..0b63168fb 100644 --- a/src/en-US.h +++ b/src/en-US.h @@ -396,6 +396,8 @@ #define STRING_CMD_IMPORT_FILE "Importing '{1}'" #define STRING_CMD_IMPORT_BAD_ATT "Unrecognized attribute '{1}'" #define STRING_CMD_IMPORT_NOT_JSON "Not a JSON object: {1}" +#define STRING_CMD_IMPORT_NO_DESC "Annotation is missing a description: {1}" +#define STRING_CMD_IMPORT_NO_ENTRY "Annotation is missing an entry date: {1}" #define STRING_CMD_SHELL_USAGE "Launches an interactive shell" #define STRING_CMD_SHELL_HELP1 "Enter any task command (such as 'list'), or hit 'Enter'." #define STRING_CMD_SHELL_HELP2 "There is no need to include the 'task' command itself."