stou32() accepts partial parses, unlike the other stringutils converters
Los mantenedores suelen responder en 2 días
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 35/100
Línea de trabajo
Comienza en src/stringutils.cpp:112-129 y compara stou32 con stou64, stoi32 y stof. Amplía la cobertura existente de StringUtils.stou32 en src/test/stringutils_test.cpp con entradas de números parciales y, después, ejecuta las pruebas de stringutils. Se considera completado cuando los caracteres finales no numéricos producen std::nullopt, mientras que los casos existentes de valores negativos, desbordamiento y valor máximo siguen siendo válidos.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Describe the bug
ovms::stou32() accepts a string that is only partially a number, unlike every other converter in src/stringutils.cpp.
src/stringutils.cpp:112-129:
std::optional<uint32_t> stou32(const std::string& input) {
std::string str = input;
ovms::erase_spaces(str);
if (!str.empty() && str[0] == '-') {
return std::nullopt;
}
try {
uint64_t val = std::stoul(str); // no idx, no full-consumption check
if (val > std::numeric_limits<uint32_t>::max()) {
return std::nullopt;
}
return {static_cast<uint32_t>(val)};
} catch (...) {
return std::nullopt;
}
}
std::stoul stops at the first character it cannot use and still reports success. Its siblings in the same file all guard against that by passing &idx and comparing against the length:
stou64—src/stringutils.cpp:143-147stoi32—src/stringutils.cpp:161-165stof—src/stringutils.cpp:203-206
(stoi64 at :181-185 validates by scanning digits first, which is equivalent.) stou32 is the only one without the check, so:
12abc -> 12
3.9 -> 3
0x10 -> 0
100% -> 100
Call sites affected
-
src/grpcservermodule.cpp:79— theGRPC_SERVERSenvironment variable:const char* environmentVariableBuffer = std::getenv("GRPC_SERVERS"); if (environmentVariableBuffer) { auto result = stou32(environmentVariableBuffer); if (result && result.value() > 0) { return result.value(); } }GRPC_SERVERS=4xsilently starts 4 gRPC servers instead of being rejected and falling back toconfig.grpcWorkers(). A typo in a deployment environment variable is applied rather than reported. -
src/audio/speech_to_text/s2t_servable.cpp:81— the transcriptiontemperaturefield, used as a fallback afterovms::stofhas already rejected the value. That endpoint's user-visible symptom is filed separately; either fix resolves it independently and the two do not conflict.
To Reproduce
Unit level, alongside the existing StringUtils.stou32 case:
EXPECT_FALSE(ovms::stou32("12abc")); // currently returns 12
EXPECT_FALSE(ovms::stou32("3.9")); // currently returns 3
EXPECT_FALSE(ovms::stou32("0x10")); // currently returns 0
End to end:
GRPC_SERVERS=4x ovms --model_path /models/... --model_name m --port 9000
# starts 4 gRPC servers; expected: the value is rejected and grpcWorkers() is used
Expected behavior
stou32 behaves like stou64/stoi32/stof: a string that is not entirely a number returns std::nullopt.
Logs
None — the value is accepted, so nothing is logged.
Configuration
- OVMS version:
main@fadb3314 - Any configuration; reachable via the
GRPC_SERVERSenvironment variable - CPU
- N/A
- N/A
Additional context
Suggested fix, matching the siblings:
size_t idx = 0;
uint64_t val = std::stoul(str, &idx);
if (idx != str.size()) {
return std::nullopt;
}
The existing StringUtils.stou32 test covers only a negative value, overflow and the maximum, so none of it changes.
Separate, deliberately not bundled: stou32 calls erase_spaces() on its input first, so stou32("12 34") yields 1234 both before and after such a fix, whereas stou64 rejects " 100 " outright (there is an explicit test for that at src/test/stringutils_test.cpp:218). Whether stou32 should also stop erasing interior whitespace is a separate behavioural question and worth deciding on its own.
Also same class, different function, mentioned only so it is on the record: src/grpcservermodule.cpp:143 uses a bare std::stoi(value) to decide whether a gRPC channel argument is an integer, so grpc.max_receive_message_length=4MB is passed to gRPC as the integer 4 rather than as the string it is. That may well be intended, given the surrounding comment, so I have not touched it.
I have a patch for this and will open a PR shortly.
- Lenguaje dominante
- C++
- Estrellas
- 932
- Forks
- 278
- Merge medio
- 2 d 15 h
- PR fusionados (30 d)
- 60
Preparar el entorno
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de openvinotoolkit/model_server
-
bug
Dificultad 3/5 1-2 días Aptitud para principiantes 68/100
openvinotoolkit/model_server#4609 · 1 comentario ·
Los mantenedores suelen responder en 2 días
-
`/v3/models` lists every model twice when `group_name` and `--idle_unload_timeout_seconds` are combinedPosiblemente ocupada @atobiszei la tomó hace 3 días. Abierto
openvinotoolkit/model_server#4604 · 1 asignado ·
Los mantenedores suelen responder en 2 días
-
Idle unload never happens again if the client disconnects while a sleeping graph is waking upPosiblemente ocupada @atobiszei la tomó hace 3 días. Abierto
openvinotoolkit/model_server#4603 · 1 asignado ·
Los mantenedores suelen responder en 2 días
-
bug
Dificultad 4/5 3-5 días Aptitud para principiantes 45/100
openvinotoolkit/model_server#4599 · 4 comentarios ·
Los mantenedores suelen responder en 2 días
-
Dificultad 3/5 1-2 días Aptitud para principiantes 55/100
openvinotoolkit/model_server#4586 · 1 comentario ·
Los mantenedores suelen responder en 2 días
Todos los issues de openvinotoolkit/model_server
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
grumpycoders/pcsx-redux#2171 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
bytedance/trae-agent#524 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Update OPENEXR_IMATH_TAGAbierto
Dificultad 1/5 Menos de una hora Aptitud para principiantes 84/100
AcademySoftwareFoundation/openexr#2683 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 85/100
microsoft/onnxruntime#32881 ·
Los mantenedores suelen responder en 1 día