Pārlūkot izejas kodu

fix: some memory safety things...

Sam Jaffe 1 gadu atpakaļ
vecāks
revīzija
f3ecc32754

+ 7 - 1
include/jvalidate/validation_result.h

@@ -42,17 +42,23 @@ public:
   }
 
 private:
-  void constraint(std::string const & name) { errors_.push_back({name}); }
+  void constraint(std::string const & name) { errors_.push_back(Errors{.constraint = name}); }
 
   void visit(size_t item) { visited_items_.emplace(item); }
   void visit(std::string const & property) { visited_properties_.emplace(property); }
 
   void error(size_t item, ValidationResult && result) {
+    if (errors_.empty()) {
+      return;
+    }
     errors_.back().items.emplace(item, std::move(result));
     visited_items_.emplace(item);
   }
 
   void error(std::string const & property, ValidationResult && result) {
+    if (errors_.empty()) {
+      return;
+    }
     errors_.back().properties.emplace(property, std::move(result));
     visited_properties_.emplace(property);
   }

+ 1 - 0
include/jvalidate/validation_visitor.h

@@ -461,6 +461,7 @@ private:
         result_(result), local_result_(local_result ?: result_) {}
 
   Status validate_subschema(schema::Node const * subschema) const {
+    EXPECT(subschema != &schema_); // TODO(samjaffe) - Figure out what's causing this infinite loop
     return ValidationVisitor(document_, *subschema, cfg_, regex_cache_, where_, result_,
                              local_result_)
         .validate();