#MediaSequence Prevent undefined index access in metadata reconciliation.

Reconciliation required feature_lists.feature_list[0].value.feature[0].float_list.size_>=1, now we skip keys where size_=0.

PiperOrigin-RevId: 508095655
This commit is contained in:
Rachel Hornung 2023-02-08 09:04:00 -08:00 committed by Copybara-Service
parent 19d895eb73
commit 4b28ced8fd
2 changed files with 7 additions and 0 deletions

View File

@ -160,6 +160,10 @@ absl::Status ReconcileMetadataFeatureFloats(
const std::string& key = key_value.first; const std::string& key = key_value.first;
if (absl::StrContains(key, kFeatureFloatsKey)) { if (absl::StrContains(key, kFeatureFloatsKey)) {
const auto prefix = key.substr(0, key.find(kFeatureFloatsKey) - 1); const auto prefix = key.substr(0, key.find(kFeatureFloatsKey) - 1);
if (GetFeatureFloatsSize(prefix, *sequence) < 1) {
// Unable to determine the feature dimensions as no data is provided.
continue;
}
int number_of_elements = GetFeatureFloatsAt(prefix, *sequence, 0).size(); int number_of_elements = GetFeatureFloatsAt(prefix, *sequence, 0).size();
if (HasFeatureDimensions(prefix, *sequence) && if (HasFeatureDimensions(prefix, *sequence) &&
!GetFeatureDimensions(prefix, *sequence).empty()) { !GetFeatureDimensions(prefix, *sequence).empty()) {

View File

@ -23,6 +23,7 @@
#include "mediapipe/framework/port/opencv_imgcodecs_inc.h" #include "mediapipe/framework/port/opencv_imgcodecs_inc.h"
#include "mediapipe/framework/port/status_matchers.h" #include "mediapipe/framework/port/status_matchers.h"
#include "tensorflow/core/example/example.pb.h" #include "tensorflow/core/example/example.pb.h"
#include "tensorflow/core/example/feature.pb.h"
namespace mediapipe { namespace mediapipe {
namespace mediasequence { namespace mediasequence {
@ -867,6 +868,8 @@ TEST(MediaSequenceTest, ReconcileMetadataFloats) {
AddFeatureFloats(feature_name, vf, &sequence); AddFeatureFloats(feature_name, vf, &sequence);
AddFeatureTimestamp(feature_name, 1000000, &sequence); AddFeatureTimestamp(feature_name, 1000000, &sequence);
AddFeatureTimestamp(feature_name, 2000000, &sequence); AddFeatureTimestamp(feature_name, 2000000, &sequence);
sequence.mutable_feature_lists()->mutable_feature_list()->insert(
{"EMPTY/feature/floats", tensorflow::FeatureList()});
MP_ASSERT_OK(ReconcileMetadata(true, false, &sequence)); MP_ASSERT_OK(ReconcileMetadata(true, false, &sequence));
ASSERT_EQ(GetFeatureDimensions(feature_name, sequence).size(), 1); ASSERT_EQ(GetFeatureDimensions(feature_name, sequence).size(), 1);