#include <minmax.h>
#include "close-stream.h"
#include "getpass.h"
+#include "xsize.h"
static int write_key(const char *username,
const unsigned char *key, size_t key_size,
/* encode username if it contains special characters */
if (strcspn(username, ":\n") != strlen(username)) {
char *new_data;
+ size_t new_size;
tmp.data = (void *)username;
tmp.size = strlen(username);
}
/* prepend '#' */
- new_data = gnutls_realloc(_username.data, _username.size + 2);
+ new_size = xsum(_username.size, 2);
+ if (size_overflow_p(new_size)) {
+ ret = -1;
+ goto out;
+ }
+ new_data = gnutls_realloc(_username.data, new_size);
if (!new_data) {
ret = -1;
goto out;
}
- memmove(_username.data + 1, _username.data, _username.size);
+ memmove(new_data + 1, new_data, _username.size);
new_data[0] = '#';
- new_data[_username.size] = '\0';
+ new_data[_username.size + 1] = '\0';
_username.data = (void *)new_data;
- _username.size += 1;
+ _username.size = new_size - 1;
} else {
_username.data = (void *)strdup(username);
_username.size = strlen(username);
echo "Checking PSK tool basic operations"
# echo create a user and check whether a key is available
-"${PSKTOOL}" -p ${TMPFILE} -u test
+${VALGRIND} "${PSKTOOL}" -p ${TMPFILE} -u test
if test $? != 0;then
echo "password generation failed..."
exit 1
# Create second user and check whether both exist
-"${PSKTOOL}" -p ${TMPFILE} -u user2
+${VALGRIND} "${PSKTOOL}" -p ${TMPFILE} -u user2
if test $? != 0;then
echo "password generation failed..."
exit 1
exit 1
fi
+# Create third user with a special character in username
+
+${VALGRIND} "${PSKTOOL}" -p ${TMPFILE} -u user:3
+if test $? != 0;then
+ echo "password generation failed..."
+ exit 1
+fi
+
+grep '#757365723a33:' ${TMPFILE} >/dev/null 2>&1
+if test $? != 0;then
+ echo "could not find third generated user..."
+ exit 1
+fi
+
+# Modify the third user password
+
+${VALGRIND} "${PSKTOOL}" -p ${TMPFILE} -u user:3
+if test $? != 0;then
+ echo "password generation failed..."
+ exit 1
+fi
+
+matches=`grep '#757365723a33:' ${TMPFILE} 2>/dev/null | wc -l`
+if test $matches != 1;then
+ echo "duplicate entry for third generated user..."
+ exit 1
+fi
+
rm -f $TMPFILE
exit 0