diff --git a/src/deh_soc.c b/src/deh_soc.c
index 5b12ea1b0b9b0339890b094516e0593e252d6556..df1ebc2752a38014b996e50154a5d1e8723c50b0 100644
--- a/src/deh_soc.c
+++ b/src/deh_soc.c
@@ -2776,13 +2776,13 @@ void readframe(MYFILE *f, INT32 num)
 			{
 				size_t z;
 				boolean found = false;
-				char actiontocompare[32];
+				size_t actionlen = strlen(word2) + 1;
+				char *actiontocompare = calloc(actionlen, 1);
 
-				memset(actiontocompare, 0x00, sizeof(actiontocompare));
-				strlcpy(actiontocompare, word2, sizeof (actiontocompare));
+				strcpy(actiontocompare, word2);
 				strupr(actiontocompare);
 
-				for (z = 0; z < 32; z++)
+				for (z = 0; z < actionlen; z++)
 				{
 					if (actiontocompare[z] == '\n' || actiontocompare[z] == '\r')
 					{
@@ -2815,6 +2815,8 @@ void readframe(MYFILE *f, INT32 num)
 
 				if (!found)
 					deh_warning("Unknown action %s", actiontocompare);
+
+				free(actiontocompare);
 			}
 			else
 				deh_warning("Frame %d: unknown word '%s'", num, word1);