@@ -63,6 +63,30 @@ Settings & Settings::operator = (const Settings &other)
63
63
}
64
64
65
65
66
+ bool Settings::checkNameValid (const std::string &name)
67
+ {
68
+ size_t pos = name.find_first_of (" \t\n\v\f\r\b =\" {}#" );
69
+ if (pos != std::string::npos) {
70
+ errorstream << " Invalid character '" << name[pos]
71
+ << " ' found in setting name" << std::endl;
72
+ return false ;
73
+ }
74
+ return true ;
75
+ }
76
+
77
+
78
+ bool Settings::checkValueValid (const std::string &value)
79
+ {
80
+ if (value.substr (0 , 3 ) == " \"\"\" " ||
81
+ value.find (" \n\"\"\" " ) != std::string::npos) {
82
+ errorstream << " Invalid character sequence '\"\"\" ' found in"
83
+ " setting value" << std::endl;
84
+ return false ;
85
+ }
86
+ return true ;
87
+ }
88
+
89
+
66
90
std::string Settings::sanitizeName (const std::string &name)
67
91
{
68
92
std::string n (name);
@@ -704,112 +728,119 @@ bool Settings::getFlagStrNoEx(const std::string &name, u32 &val,
704
728
* Setters *
705
729
***********/
706
730
707
- void Settings::setEntry (const std::string &name, const void *data,
731
+ bool Settings::setEntry (const std::string &name, const void *data,
708
732
bool set_group, bool set_default)
709
733
{
710
734
Settings *old_group = NULL ;
711
735
712
- std::string n = sanitizeName (name);
736
+ if (!checkNameValid (name))
737
+ return false ;
738
+ if (!set_group && !checkValueValid (*(const std::string *)data))
739
+ return false ;
713
740
714
741
{
715
742
JMutexAutoLock lock (m_mutex);
716
743
717
- SettingsEntry &entry = set_default ? m_defaults[n ] : m_settings[n ];
744
+ SettingsEntry &entry = set_default ? m_defaults[name ] : m_settings[name ];
718
745
old_group = entry.group ;
719
746
720
- entry.value = set_group ? " " : sanitizeValue ( *(const std::string *)data) ;
747
+ entry.value = set_group ? " " : *(const std::string *)data;
721
748
entry.group = set_group ? *(Settings **)data : NULL ;
722
749
entry.is_group = set_group;
723
750
}
724
751
725
752
delete old_group;
753
+
754
+ return true ;
726
755
}
727
756
728
757
729
- void Settings::set (const std::string &name, const std::string &value)
758
+ bool Settings::set (const std::string &name, const std::string &value)
730
759
{
731
- setEntry (name, &value, false , false );
760
+ if (!setEntry (name, &value, false , false ))
761
+ return false ;
732
762
733
763
doCallbacks (name);
764
+ return true ;
734
765
}
735
766
736
767
737
- void Settings::setDefault (const std::string &name, const std::string &value)
768
+ bool Settings::setDefault (const std::string &name, const std::string &value)
738
769
{
739
- setEntry (name, &value, false , true );
770
+ return setEntry (name, &value, false , true );
740
771
}
741
772
742
773
743
- void Settings::setGroup (const std::string &name, Settings *group)
774
+ bool Settings::setGroup (const std::string &name, Settings *group)
744
775
{
745
- setEntry (name, &group, true , false );
776
+ return setEntry (name, &group, true , false );
746
777
}
747
778
748
779
749
- void Settings::setGroupDefault (const std::string &name, Settings *group)
780
+ bool Settings::setGroupDefault (const std::string &name, Settings *group)
750
781
{
751
- setEntry (name, &group, true , true );
782
+ return setEntry (name, &group, true , true );
752
783
}
753
784
754
785
755
- void Settings::setBool (const std::string &name, bool value)
786
+ bool Settings::setBool (const std::string &name, bool value)
756
787
{
757
- set (name, value ? " true" : " false" );
788
+ return set (name, value ? " true" : " false" );
758
789
}
759
790
760
791
761
- void Settings::setS16 (const std::string &name, s16 value)
792
+ bool Settings::setS16 (const std::string &name, s16 value)
762
793
{
763
- set (name, itos (value));
794
+ return set (name, itos (value));
764
795
}
765
796
766
797
767
- void Settings::setU16 (const std::string &name, u16 value)
798
+ bool Settings::setU16 (const std::string &name, u16 value)
768
799
{
769
- set (name, itos (value));
800
+ return set (name, itos (value));
770
801
}
771
802
772
803
773
- void Settings::setS32 (const std::string &name, s32 value)
804
+ bool Settings::setS32 (const std::string &name, s32 value)
774
805
{
775
- set (name, itos (value));
806
+ return set (name, itos (value));
776
807
}
777
808
778
809
779
- void Settings::setU64 (const std::string &name, u64 value)
810
+ bool Settings::setU64 (const std::string &name, u64 value)
780
811
{
781
812
std::ostringstream os;
782
813
os << value;
783
- set (name, os.str ());
814
+ return set (name, os.str ());
784
815
}
785
816
786
817
787
- void Settings::setFloat (const std::string &name, float value)
818
+ bool Settings::setFloat (const std::string &name, float value)
788
819
{
789
- set (name, ftos (value));
820
+ return set (name, ftos (value));
790
821
}
791
822
792
823
793
- void Settings::setV2F (const std::string &name, v2f value)
824
+ bool Settings::setV2F (const std::string &name, v2f value)
794
825
{
795
826
std::ostringstream os;
796
827
os << " (" << value.X << " ," << value.Y << " )" ;
797
- set (name, os.str ());
828
+ return set (name, os.str ());
798
829
}
799
830
800
831
801
- void Settings::setV3F (const std::string &name, v3f value)
832
+ bool Settings::setV3F (const std::string &name, v3f value)
802
833
{
803
834
std::ostringstream os;
804
835
os << " (" << value.X << " ," << value.Y << " ," << value.Z << " )" ;
805
- set (name, os.str ());
836
+ return set (name, os.str ());
806
837
}
807
838
808
839
809
- void Settings::setFlagStr (const std::string &name, u32 flags,
840
+ bool Settings::setFlagStr (const std::string &name, u32 flags,
810
841
const FlagDesc *flagdesc, u32 flagmask)
811
842
{
812
- set (name, writeFlagString (flags, flagdesc, flagmask));
843
+ return set (name, writeFlagString (flags, flagdesc, flagmask));
813
844
}
814
845
815
846
@@ -820,12 +851,11 @@ bool Settings::setStruct(const std::string &name, const std::string &format,
820
851
if (!serializeStructToString (&structstr, format, value))
821
852
return false ;
822
853
823
- set (name, structstr);
824
- return true ;
854
+ return set (name, structstr);
825
855
}
826
856
827
857
828
- void Settings::setNoiseParams (const std::string &name,
858
+ bool Settings::setNoiseParams (const std::string &name,
829
859
const NoiseParams &np, bool set_default)
830
860
{
831
861
Settings *group = new Settings;
@@ -839,7 +869,7 @@ void Settings::setNoiseParams(const std::string &name,
839
869
group->setFloat (" lacunarity" , np.lacunarity );
840
870
group->setFlagStr (" flags" , np.flags , flagdesc_noiseparams, np.flags );
841
871
842
- setEntry (name, &group, true , set_default);
872
+ return setEntry (name, &group, true , set_default);
843
873
}
844
874
845
875
0 commit comments