summaryrefslogtreecommitdiff
path: root/usr/src/lib/libdtrace/common/dt_parser.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/lib/libdtrace/common/dt_parser.c')
-rw-r--r--usr/src/lib/libdtrace/common/dt_parser.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/usr/src/lib/libdtrace/common/dt_parser.c b/usr/src/lib/libdtrace/common/dt_parser.c
index 07db59982e..9aabc18565 100644
--- a/usr/src/lib/libdtrace/common/dt_parser.c
+++ b/usr/src/lib/libdtrace/common/dt_parser.c
@@ -2498,6 +2498,7 @@ dt_node_provider(char *name, dt_node_t *probes)
dtrace_hdl_t *dtp = yypcb->pcb_hdl;
dt_node_t *dnp = dt_node_alloc(DT_NODE_PROVIDER);
dt_node_t *lnp;
+ size_t len;
dnp->dn_provname = name;
dnp->dn_probes = probes;
@@ -2507,11 +2508,16 @@ dt_node_provider(char *name, dt_node_t *probes)
"contain scoping operator: %s\n", name);
}
- if (strlen(name) >= DTRACE_PROVNAMELEN) {
+ if ((len = strlen(name)) >= DTRACE_PROVNAMELEN) {
dnerror(dnp, D_PROV_BADNAME, "provider name may not exceed %d "
"characters: %s\n", DTRACE_PROVNAMELEN - 1, name);
}
+ if (isdigit(name[len - 1])) {
+ dnerror(dnp, D_PROV_BADNAME, "provider name may not "
+ "end with a digit: %s\n", name);
+ }
+
/*
* Check to see if the provider is already defined or visible through
* dtrace(7D). If so, set dn_provred to treat it as a re-declaration.