fix: handle empty strings