Commit 2674e1a4 authored by Mark Andrews's avatar Mark Andrews

1940. [bug] Fixed a number of error conditions reported by

                        Coverity.
parent 91be6c5b
1940. [bug] Fixed a number of error conditions reported by
Coverity.
1939. [bug] The resolver could dereference a null pointer after
validation if all the queries have timed out.
[RT #15528]
......
......@@ -16,7 +16,7 @@
* IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
/* $Id: dnssec-signzone.c,v 1.192 2005/10/14 01:14:06 marka Exp $ */
/* $Id: dnssec-signzone.c,v 1.193 2005/11/30 03:33:48 marka Exp $ */
/*! \file */
......@@ -1271,10 +1271,6 @@ nsecify(void) {
result = dns_dbiterator_next(dbiter);
continue;
}
if (result != ISC_R_SUCCESS) {
dns_db_detachnode(gdb, &nextnode);
break;
}
if (!dns_name_issubdomain(nextname, gorigin) ||
(zonecut != NULL &&
dns_name_issubdomain(nextname, zonecut)))
......
......@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
/* $Id: config.c,v 1.61 2005/09/05 02:54:36 marka Exp $ */
/* $Id: config.c,v 1.62 2005/11/30 03:33:48 marka Exp $ */
/*! \file */
......@@ -448,13 +448,14 @@ ns_config_getipandkeylist(cfg_obj_t *config, cfg_obj_t *list, isc_mem_t *mctx,
if (val > ISC_UINT16_MAX) {
cfg_obj_log(portobj, ns_g_lctx, ISC_LOG_ERROR,
"port '%u' out of range", val);
return (ISC_R_RANGE);
result = ISC_R_RANGE;
goto cleanup;
}
port = (in_port_t) val;
} else {
result = ns_config_getport(config, &port);
if (result != ISC_R_SUCCESS)
return (result);
goto cleanup;
}
result = ISC_R_NOMEMORY;
......@@ -615,9 +616,9 @@ ns_config_getipandkeylist(cfg_obj_t *config, cfg_obj_t *list, isc_mem_t *mctx,
if (new == NULL)
goto cleanup;
memcpy(new, addrs, newsize);
isc_mem_put(mctx, addrs, oldsize);
} else
new = NULL;
isc_mem_put(mctx, addrs, oldsize);
addrs = new;
addrcount = i;
......@@ -628,9 +629,9 @@ ns_config_getipandkeylist(cfg_obj_t *config, cfg_obj_t *list, isc_mem_t *mctx,
if (new == NULL)
goto cleanup;
memcpy(new, keys, newsize);
isc_mem_put(mctx, keys, oldsize);
} else
new = NULL;
isc_mem_put(mctx, keys, oldsize);
keys = new;
keycount = i;
}
......
......@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
/* $Id: controlconf.c,v 1.45 2005/08/23 02:36:06 marka Exp $ */
/* $Id: controlconf.c,v 1.46 2005/11/30 03:33:48 marka Exp $ */
/*! \file */
......@@ -364,6 +364,9 @@ control_recvmessage(isc_task_t *task, isc_event_t *event) {
{
ccregion.rstart = isc_buffer_base(&conn->ccmsg.buffer);
ccregion.rend = isc_buffer_used(&conn->ccmsg.buffer);
if (secret.rstart != NULL)
isc_mem_put(listener->mctx, secret.rstart,
REGION_SIZE(secret));
secret.rstart = isc_mem_get(listener->mctx, key->secret.length);
if (secret.rstart == NULL)
goto cleanup;
......@@ -379,8 +382,6 @@ control_recvmessage(isc_task_t *task, isc_event_t *event) {
*/
if (request != NULL)
isccc_sexpr_free(&request);
isc_mem_put(listener->mctx, secret.rstart,
REGION_SIZE(secret));
} else {
log_invalid(&conn->ccmsg, result);
goto cleanup;
......@@ -994,11 +995,17 @@ update_listener(ns_controls_t *cp,
* but tracking whether they are identical just for the
* sake of avoiding this message would be too much trouble.
*/
cfg_obj_log(control, ns_g_lctx, ISC_LOG_WARNING,
"couldn't install new keys for "
"command channel %s: %s",
socktext, isc_result_totext(result));
if (control != NULL)
cfg_obj_log(control, ns_g_lctx, ISC_LOG_WARNING,
"couldn't install new keys for "
"command channel %s: %s",
socktext, isc_result_totext(result));
else
isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL,
NS_LOGMODULE_CONTROL, ISC_LOG_WARNING,
"couldn't install new keys for "
"command channel %s: %s",
socktext, isc_result_totext(result));
/*
* Now, keep the old access list unless a new one can be made.
......@@ -1016,12 +1023,18 @@ update_listener(ns_controls_t *cp,
dns_acl_detach(&listener->acl);
dns_acl_attach(new_acl, &listener->acl);
dns_acl_detach(&new_acl);
} else
/* XXXDCL say the old acl is still used? */
} else if (control != NULL)
cfg_obj_log(control, ns_g_lctx, ISC_LOG_WARNING,
"couldn't install new acl for "
"command channel %s: %s",
socktext, isc_result_totext(result));
else
isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL,
NS_LOGMODULE_CONTROL, ISC_LOG_WARNING,
"couldn't install new acl for "
"command channel %s: %s",
socktext, isc_result_totext(result));
if (result == ISC_R_SUCCESS && type == isc_sockettype_unix) {
isc_uint32_t perm, owner, group;
......@@ -1037,7 +1050,7 @@ update_listener(ns_controls_t *cp,
listener->perm = perm;
listener->owner = owner;
listener->group = group;
} else
} else if (control != NULL)
cfg_obj_log(control, ns_g_lctx, ISC_LOG_WARNING,
"couldn't update ownership/permission for "
"command channel %s", socktext);
......
......@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
/* $Id: interfacemgr.c,v 1.82 2005/07/18 05:58:56 marka Exp $ */
/* $Id: interfacemgr.c,v 1.83 2005/11/30 03:33:48 marka Exp $ */
/*! \file */
......@@ -766,9 +766,8 @@ do_scan(ns_interfacemgr_t *mgr, ns_listenlist_t *ext_listen,
* See if the address matches the listen-on statement;
* if not, ignore the interface.
*/
result = dns_acl_match(&listen_netaddr, NULL,
le->acl, &mgr->aclenv,
&match, NULL);
(void)dns_acl_match(&listen_netaddr, NULL, le->acl,
&mgr->aclenv, &match, NULL);
if (match <= 0)
continue;
......@@ -799,9 +798,9 @@ do_scan(ns_interfacemgr_t *mgr, ns_listenlist_t *ext_listen,
for (ele = ISC_LIST_HEAD(ext_listen->elts);
ele != NULL;
ele = ISC_LIST_NEXT(ele, link)) {
dns_acl_match(&listen_netaddr, NULL,
ele->acl, NULL,
&match, NULL);
(void)dns_acl_match(&listen_netaddr,
NULL, ele->acl,
NULL, &match, NULL);
if (match > 0 && ele->port == le->port)
break;
else
......
......@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
/* $Id: lwdgrbn.c,v 1.15 2005/04/29 00:22:28 marka Exp $ */
/* $Id: lwdgrbn.c,v 1.16 2005/11/30 03:33:48 marka Exp $ */
/*! \file */
......@@ -360,7 +360,7 @@ lookup_done(isc_task_t *task, isc_event_t *event) {
client->sendlength = r.length;
result = ns_lwdclient_sendreply(client, &r);
if (result != ISC_R_SUCCESS)
goto out;
goto out2;
NS_LWDCLIENT_SETSEND(client);
......@@ -380,7 +380,7 @@ lookup_done(isc_task_t *task, isc_event_t *event) {
if (grbn->siglen != NULL)
isc_mem_put(cm->mctx, grbn->siglen,
grbn->nsigs * sizeof(lwres_uint16_t));
out2:
if (client->lookup != NULL)
dns_lookup_destroy(&client->lookup);
if (lwb.base != NULL)
......
......@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
/* $Id: lwresd.c,v 1.50 2005/08/23 02:36:07 marka Exp $ */
/* $Id: lwresd.c,v 1.51 2005/11/30 03:33:48 marka Exp $ */
/*! \file
* \brief
......@@ -408,6 +408,7 @@ ns_lwdmanager_create(isc_mem_t *mctx, cfg_obj_t *lwres,
ns_lwsearchlist_detach(&lwresd->search);
if (lwresd->mctx != NULL)
isc_mem_detach(&lwresd->mctx);
isc_mem_put(mctx, lwresd, sizeof(ns_lwresd_t));
return (result);
}
......
......@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
/* $Id: query.c,v 1.275 2005/11/02 01:28:45 marka Exp $ */
/* $Id: query.c,v 1.276 2005/11/30 03:33:48 marka Exp $ */
/*! \file */
......@@ -3270,7 +3270,9 @@ warn_rfc1918(ns_client_t *client, dns_name_t *fname, dns_rdataset_t *rdataset) {
result = dns_rdataset_first(&found);
RUNTIME_CHECK(result == ISC_R_SUCCESS);
dns_rdataset_current(&found, &rdata);
dns_rdata_tostruct(&rdata, &soa, NULL);
result = dns_rdata_tostruct(&rdata, &soa, NULL);
if (result != ISC_R_SUCCESS)
return;
if (dns_name_equal(&soa.origin, &prisoner) &&
dns_name_equal(&soa.contact, &hostmaster)) {
char buf[DNS_NAME_FORMATSIZE];
......
......@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
/* $Id: server.c,v 1.450 2005/09/05 00:10:52 marka Exp $ */
/* $Id: server.c,v 1.451 2005/11/30 03:33:48 marka Exp $ */
/*! \file */
......@@ -277,7 +277,7 @@ configure_view_acl(cfg_obj_t *vconfig, cfg_obj_t *config,
}
maps[i] = NULL;
result = ns_config_get(maps, aclname, &aclobj);
(void)ns_config_get(maps, aclname, &aclobj);
if (aclobj == NULL)
/*
* No value available. *aclp == NULL.
......@@ -496,7 +496,6 @@ get_view_querysource_dispatch(cfg_obj_t **maps,
case AF_INET:
result = ns_config_get(maps, "query-source", &obj);
INSIST(result == ISC_R_SUCCESS);
break;
case AF_INET6:
result = ns_config_get(maps, "query-source-v6", &obj);
......@@ -905,7 +904,7 @@ configure_view(dns_view_t *view, cfg_obj_t *config, cfg_obj_t *vconfig,
* unless explicitly disabled.
*/
obj = NULL;
ns_config_get(maps, "use-additional-cache", &obj);
(void)ns_config_get(maps, "use-additional-cache", &obj);
if (obj == NULL || cfg_obj_asboolean(obj)) {
cmctx = NULL;
CHECK(isc_mem_create(0, 0, &cmctx));
......@@ -1282,7 +1281,7 @@ configure_view(dns_view_t *view, cfg_obj_t *config, cfg_obj_t *vconfig,
* Configure the "match-recursive-only" option.
*/
obj = NULL;
(void) ns_config_get(maps, "match-recursive-only", &obj);
(void)ns_config_get(maps, "match-recursive-only", &obj);
if (obj != NULL && cfg_obj_asboolean(obj))
view->matchrecursiveonly = ISC_TRUE;
else
......@@ -2249,8 +2248,7 @@ add_listenelt(isc_mem_t *mctx, ns_listenlist_t *list, isc_sockaddr_t *addr) {
clean:
INSIST(lelt == NULL);
if (src_acl != NULL)
dns_acl_detach(&src_acl);
dns_acl_detach(&src_acl);
return (result);
}
......@@ -4229,6 +4227,11 @@ ns_server_dumpdb(ns_server_t *server, char *args) {
char *ptr;
const char *sep;
/* Skip the command name. */
ptr = next_token(&args, " \t");
if (ptr == NULL)
return (ISC_R_UNEXPECTEDEND);
dctx = isc_mem_get(server->mctx, sizeof(*dctx));
if (dctx == NULL)
return (ISC_R_NOMEMORY);
......@@ -4251,11 +4254,6 @@ ns_server_dumpdb(ns_server_t *server, char *args) {
CHECKMF(isc_stdio_open(server->dumpfile, "w", &dctx->fp),
"could not open dump file", server->dumpfile);
/* Skip the command name. */
ptr = next_token(&args, " \t");
if (ptr == NULL)
return (ISC_R_UNEXPECTEDEND);
sep = (args == NULL) ? "" : ": ";
isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL,
NS_LOGMODULE_SERVER, ISC_LOG_INFO,
......
......@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
/* $Id: zoneconf.c,v 1.124 2005/08/24 23:53:57 marka Exp $ */
/* $Id: zoneconf.c,v 1.125 2005/11/30 03:33:48 marka Exp $ */
/*% */
......@@ -730,6 +730,7 @@ ns_zone_configure(cfg_obj_t *config, cfg_obj_t *vconfig, cfg_obj_t *zconfig,
switch (ztype) {
case dns_zone_slave:
case dns_zone_stub:
count = 0;
obj = NULL;
result = cfg_map_get(zoptions, "masters", &obj);
if (obj != NULL) {
......
......@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
/* $Id: t_db.c,v 1.32 2004/10/25 01:27:54 marka Exp $ */
/* $Id: t_db.c,v 1.33 2005/11/30 03:33:48 marka Exp $ */
#include <config.h>
......@@ -403,8 +403,10 @@ test_dns_db_zc_x(const char *filename, dns_dbtype_t dbtype,
/*
* Skip comment lines.
*/
if ((isspace((unsigned char)*p)) || (*p == '#'))
if ((isspace((unsigned char)*p)) || (*p == '#')) {
(void)free(p);
continue;
}
cnt = t_bustline(p, tokens);
if (cnt == 4) {
......
......@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
/* $Id: dst_test.c,v 1.39 2004/06/11 00:27:05 marka Exp $ */
/* $Id: dst_test.c,v 1.40 2005/11/30 03:33:48 marka Exp $ */
#include <config.h>
......@@ -236,23 +236,34 @@ main(void) {
isc_buffer_t b;
dns_fixedname_t fname;
dns_name_t *name;
isc_result_t result;
isc_mem_create(0, 0, &mctx);
result = isc_mem_create(0, 0, &mctx);
if (result != ISC_R_SUCCESS)
return (1);
current = isc_mem_get(mctx, 256);
if (current == NULL)
return (1);
getcwd(current, 256);
dns_result_register();
isc_entropy_create(mctx, &ectx);
isc_entropy_createfilesource(ectx, "randomfile");
result = isc_entropy_create(mctx, &ectx);
if (result != ISC_R_SUCCESS)
return (1);
result = isc_entropy_createfilesource(ectx, "randomfile");
if (result != ISC_R_SUCCESS)
return (1);
dst_lib_init(mctx, ectx, ISC_ENTROPY_BLOCKING|ISC_ENTROPY_GOODONLY);
dns_fixedname_init(&fname);
name = dns_fixedname_name(&fname);
isc_buffer_init(&b, "test.", 5);
isc_buffer_add(&b, 5);
dns_name_fromtext(name, &b, NULL, ISC_FALSE, NULL);
result = dns_name_fromtext(name, &b, NULL, ISC_FALSE, NULL);
if (result != ISC_R_SUCCESS)
return (1);
io(name, 23616, DST_ALG_DSA, DST_TYPE_PRIVATE|DST_TYPE_PUBLIC, mctx);
io(name, 54622, DST_ALG_RSAMD5, DST_TYPE_PRIVATE|DST_TYPE_PUBLIC,
mctx);
......@@ -262,7 +273,9 @@ main(void) {
isc_buffer_init(&b, "dh.", 3);
isc_buffer_add(&b, 3);
dns_name_fromtext(name, &b, NULL, ISC_FALSE, NULL);
result = dns_name_fromtext(name, &b, NULL, ISC_FALSE, NULL);
if (result != ISC_R_SUCCESS)
return (1);
dh(name, 18602, name, 48957, mctx);
generate(DST_ALG_RSAMD5, mctx);
......
......@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
/* $Id: t_dst.c,v 1.49 2004/06/11 00:27:05 marka Exp $ */
/* $Id: t_dst.c,v 1.50 2005/11/30 03:33:48 marka Exp $ */
#include <config.h>
......@@ -405,7 +405,13 @@ t1(void) {
name = dns_fixedname_name(&fname);
isc_buffer_init(&b, "test.", 5);
isc_buffer_add(&b, 5);
dns_name_fromtext(name, &b, NULL, ISC_FALSE, NULL);
isc_result = dns_name_fromtext(name, &b, NULL, ISC_FALSE, NULL);
if (isc_result != ISC_R_SUCCESS) {
t_info("dns_name_fromtext failed %s\n",
isc_result_totext(isc_result));
t_result(T_UNRESOLVED);
return;
}
io(name, 23616, DST_ALG_DSA, DST_TYPE_PRIVATE|DST_TYPE_PUBLIC,
mctx, ISC_R_SUCCESS, &nfails, &nprobs);
t_info("testing use of stored keys [2]\n");
......@@ -421,7 +427,13 @@ t1(void) {
isc_buffer_init(&b, "dh.", 3);
isc_buffer_add(&b, 3);
dns_name_fromtext(name, &b, NULL, ISC_FALSE, NULL);
isc_result = dns_name_fromtext(name, &b, NULL, ISC_FALSE, NULL);
if (isc_result != ISC_R_SUCCESS) {
t_info("dns_name_fromtext failed %s\n",
isc_result_totext(isc_result));
t_result(T_UNRESOLVED);
return;
}
dh(name, 18602, name, 48957, mctx, ISC_R_SUCCESS, &nfails, &nprobs);
......@@ -674,7 +686,14 @@ t2_sigchk(char *datapath, char *sigpath, char *keyname,
name = dns_fixedname_name(&fname);
isc_buffer_init(&b, keyname, strlen(keyname));
isc_buffer_add(&b, strlen(keyname));
dns_name_fromtext(name, &b, dns_rootname, ISC_FALSE, NULL);
isc_result = dns_name_fromtext(name, &b, dns_rootname, ISC_FALSE, NULL);
if (isc_result != ISC_R_SUCCESS) {
t_info("dns_name_fromtext failed %s\n",
isc_result_totext(isc_result));
(void) free(data);
++*nprobs;
return;
}
isc_result = dst_key_fromfile(name, id, alg, type, NULL, mctx, &key);
if (isc_result != ISC_R_SUCCESS) {
t_info("dst_key_fromfile failed %s\n",
......
......@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
/* $Id: t_master.c,v 1.32 2004/03/05 04:58:49 marka Exp $ */
/* $Id: t_master.c,v 1.33 2005/11/30 03:33:48 marka Exp $ */
#include <config.h>
......@@ -153,8 +153,10 @@ test_master_x(const char *filename) {
/*
* Skip comment lines.
*/
if ((isspace(*p & 0xff)) || (*p == '#'))
if ((isspace(*p & 0xff)) || (*p == '#')) {
(void)free(p);
continue;
}
/*
* Name of data file, origin, zclass, expected result.
......
......@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
/* $Id: t_names.c,v 1.38 2005/04/29 00:22:41 marka Exp $ */
/* $Id: t_names.c,v 1.39 2005/11/30 03:33:48 marka Exp $ */
#include <config.h>
......@@ -568,8 +568,10 @@ t_dns_name_isabsolute(void) {
/*
* Skip comment lines.
*/
if ((isspace((unsigned char)*p)) || (*p == '#'))
if ((isspace((unsigned char)*p)) || (*p == '#')) {
(void)free(p);
continue;
}
cnt = bustline(p, Tokens);
if (cnt == 2) {
......@@ -679,8 +681,10 @@ t_dns_name_hash(void) {
/*
* Skip comment lines.
*/
if ((isspace((unsigned char)*p)) || (*p == '#'))
if ((isspace((unsigned char)*p)) || (*p == '#')) {
(void)free(p);
continue;
}
cnt = bustline(p, Tokens);
if (cnt == 4) {
......@@ -833,8 +837,10 @@ t_dns_name_fullcompare(void) {
/*
* Skip comment lines.
*/
if ((isspace((unsigned char)*p)) || (*p == '#'))
if ((isspace((unsigned char)*p)) || (*p == '#')) {
(void)free(p);
continue;
}
cnt = bustline(p, Tokens);
if (cnt == 6) {
......@@ -951,8 +957,10 @@ t_dns_name_compare(void) {
/*
* Skip comment lines.
*/
if ((isspace((unsigned char)*p)) || (*p == '#'))
if ((isspace((unsigned char)*p)) || (*p == '#')) {
(void)free(p);
continue;
}
cnt = bustline(p, Tokens);
if (cnt == 3) {
......@@ -1051,8 +1059,10 @@ t_dns_name_rdatacompare(void) {
/*
* Skip comment lines.
*/
if ((isspace((unsigned char)*p)) || (*p == '#'))
if ((isspace((unsigned char)*p)) || (*p == '#')) {
(void)free(p);
continue;
}
cnt = bustline(p, Tokens);
if (cnt == 3) {
......@@ -1147,8 +1157,10 @@ t_dns_name_issubdomain(void) {
/*
* Skip comment lines.
*/
if ((isspace((unsigned char)*p)) || (*p == '#'))
if ((isspace((unsigned char)*p)) || (*p == '#')) {
(void)free(p);
continue;
}
cnt = bustline(p, Tokens);
if (cnt == 3) {
......@@ -1228,8 +1240,10 @@ t_dns_name_countlabels(void) {
/*
* Skip comment lines.
*/
if ((isspace((unsigned char)*p)) || (*p == '#'))
if ((isspace((unsigned char)*p)) || (*p == '#')) {
(void)free(p);
continue;
}
cnt = bustline(p, Tokens);
if (cnt == 2) {
......@@ -1338,8 +1352,10 @@ t_dns_name_getlabel(void) {
/*
* Skip comment lines.
*/
if ((isspace((unsigned char)*p)) || (*p == '#'))
if ((isspace((unsigned char)*p)) || (*p == '#')) {
(void)free(p);
continue;
}
cnt = bustline(p, Tokens);
if (cnt == 4) {
......@@ -1466,8 +1482,10 @@ t_dns_name_getlabelsequence(void) {
/*
* Skip comment lines.
*/
if ((isspace((unsigned char)*p)) || (*p == '#'))
if ((isspace((unsigned char)*p)) || (*p == '#')) {
(void)free(p);
continue;
}
cnt = bustline(p, Tokens);
if (cnt == 5) {
......@@ -1554,8 +1572,10 @@ t_dns_name_fromregion(void) {
/*
* Skip comment lines.
*/
if ((isspace((unsigned char)*p)) || (*p == '#'))
if ((isspace((unsigned char)*p)) || (*p == '#')) {
(void)free(p);
continue;
}
cnt = bustline(p, Tokens);
if (cnt == 1) {
......@@ -1602,8 +1622,10 @@ t_dns_name_toregion(void) {
/*
* Skip comment lines.
*/
if ((isspace((unsigned char)*p)) || (*p == '#'))
if ((isspace((unsigned char)*p)) || (*p == '#')) {
(void)free(p);
continue;
}
cnt = bustline(p, Tokens);
if (cnt == 1) {
......@@ -1737,8 +1759,10 @@ t_dns_name_fromtext(void) {
/*
* Skip comment lines.
*/
if ((isspace((unsigned char)*p)) || (*p == '#'))
if ((isspace((unsigned char)*p)) || (*p == '#')) {
(void)free(p);
continue;
}
cnt = bustline(p, Tokens);