diff --git a/main/pbx.c b/main/pbx.c
index 8e20f8686abf3766788a413d46ecc569837f5601..546cc8fca458ac97ee99be662dbfd95f3114223b 100644
--- a/main/pbx.c
+++ b/main/pbx.c
@@ -4225,12 +4225,10 @@ static int handle_statechange(void *datap)
 
 	AST_RWLIST_TRAVERSE(&hints, hint, list) {
 		struct ast_state_cb *cblist;
-		char buf[AST_MAX_EXTENSION];
-		char *parse = buf;
+		char *parse = ast_strdupa(ast_get_extension_app(hint->exten));
 		char *cur;
 		int state;
 
-		ast_copy_string(buf, ast_get_extension_app(hint->exten), sizeof(buf));
 		while ( (cur = strsep(&parse, "&")) ) {
 			if (!strcasecmp(cur, sc->dev)) {
 				break;