diff --git a/include/libcamera/base/utils.h b/include/libcamera/base/utils.h
index 889bb4a2270e..ed88b7163770 100644
--- a/include/libcamera/base/utils.h
+++ b/include/libcamera/base/utils.h
@@ -170,6 +170,12 @@ public:
 	class iterator
 	{
 	public:
+		using difference_type = std::size_t;
+		using value_type = std::string;
+		using pointer = value_type *;
+		using reference = value_type &;
+		using iterator_category = std::input_iterator_tag;
+
 		iterator(const StringSplitter *ss, std::string::size_type pos);
 
 		iterator &operator++();
diff --git a/test/utils.cpp b/test/utils.cpp
index 129807a63ec6..58b5a59dd17d 100644
--- a/test/utils.cpp
+++ b/test/utils.cpp
@@ -276,6 +276,14 @@ protected:
 			return TestFail;
 		}
 
+		const auto &split = utils::split(path, ":");
+		dirs = std::vector<std::string>{ split.begin(), split.end() };
+
+		if (dirs != elements) {
+			cerr << "utils::split() LegacyInputIterator test failed" << endl;
+			return TestFail;
+		}
+
 		/* utils::join() with conversion function test. */
 		std::vector<Size> sizes = { { 0, 0 }, { 100, 100 } };
 		s = utils::join(sizes, "/", [](const Size &size) {
