#include "extract.h"
#include "smb.h"
+static int stringlen_is_set;
static uint32_t stringlen;
extern const u_char *startbuf;
+/*
+ * Reset SMB state.
+ */
+void
+smb_reset(void)
+{
+ stringlen_is_set = 0;
+ stringlen = 0;
+}
+
/*
* interpret a 32 bit dos packed date/time to some parameters
*/
case 'b':
ND_TCHECK_1(buf);
stringlen = GET_U_1(buf);
+ stringlen_is_set = 1;
ND_PRINT("%u", stringlen);
buf += 1;
break;
ND_TCHECK_2(buf);
stringlen = reverse ? GET_BE_U_2(buf) :
GET_LE_U_2(buf);
+ stringlen_is_set = 1;
ND_PRINT("%u", stringlen);
buf += 2;
break;
ND_TCHECK_4(buf);
stringlen = reverse ? GET_BE_U_4(buf) :
GET_LE_U_4(buf);
+ stringlen_is_set = 1;
ND_PRINT("%u", stringlen);
buf += 4;
break;
}
case 'c':
{
+ if (!stringlen_is_set) {
+ ND_PRINT("{stringlen not set}");
+ goto trunc;
+ }
ND_TCHECK_LEN(buf, stringlen);
ND_PRINT("%-*.*s", (int)stringlen, (int)stringlen, buf);
buf += stringlen;
{
int result;
+ if (!stringlen_is_set) {
+ ND_PRINT("{stringlen not set}");
+ goto trunc;
+ }
result = unistr(ndo, &strbuf, buf, &stringlen, 0, unicodestr);
ND_PRINT("%s", strbuf);
if (result == -1)