From 160f79b459b7d7dc07830e679349d82c3a77256d Mon Sep 17 00:00:00 2001 From: Adam Dickmeiss Date: Wed, 24 Sep 2008 20:19:37 +0200 Subject: [PATCH] Ensure format command is a no-op if bad syntax is passed to it. --- client/client.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/client/client.c b/client/client.c index c34d201..106f12d 100644 --- a/client/client.c +++ b/client/client.c @@ -3267,23 +3267,29 @@ int cmd_format(const char *arg) printf("Usage: format \n"); return 0; } + while (sscanf(cp, "%40s%n", form_str, &nor) >= 1 && nor > 0 + && idx < RECORDSYNTAX_MAX) + { + if (strcmp(form_str, "none") && + !yaz_string_to_oid_odr(yaz_oid_std(), CLASS_RECSYN, form_str, out)) + { + printf("Bad format: %s\n", form_str); + return 0; + } + cp += nor; + } for (i = 0; i < recordsyntax_size; i++) { xfree(recordsyntax_list[i]); recordsyntax_list[i] = 0; } - + + cp = arg; while (sscanf(cp, "%40s%n", form_str, &nor) >= 1 && nor > 0 && idx < RECORDSYNTAX_MAX) { if (!strcmp(form_str, "none")) break; - if (!yaz_string_to_oid_odr(yaz_oid_std(), CLASS_RECSYN, form_str, out)) - { - printf("Bad format: %s\n", form_str); - recordsyntax_size = 0; - return 0; - } recordsyntax_list[idx] = xstrdup(form_str); cp += nor; idx++; -- 1.7.10.4