@@ -108,44 +108,60 @@ class BOOST_URI_DECL uri {
108
108
return uri_parts_.fragment ? uri_parts_.fragment .get () : const_range_type ();
109
109
}
110
110
111
+ // hackfix by Simon Haegler, Esri R&D Zurich
112
+ // this workaround is needed to avoid running into the "incompatible string iterator" assertion
113
+ // triggered by the default-constructed string iterators employed by cpp-netlib (see uri.ipp qi::rule declarations)
114
+ #if defined(_MSC_VER) && defined(_DEBUG)
115
+ # define CATCH_EMPTY_ITERATOR_RANGE if (range.begin()._Getcont() == 0 || range.end()._Getcont() == 0 ) { return string_type (); }
116
+ #else
117
+ # define CATCH_EMPTY_ITERATOR_RANGE
118
+ #endif
119
+
111
120
string_type scheme () const {
112
121
const_range_type range = scheme_range ();
113
- return range ? string_type (boost::begin (range), boost::end (range))
122
+ CATCH_EMPTY_ITERATOR_RANGE
123
+ return range ? string_type (boost::begin (range), boost::end (range))
114
124
: string_type ();
115
125
}
116
126
117
127
string_type user_info () const {
118
128
const_range_type range = user_info_range ();
129
+ CATCH_EMPTY_ITERATOR_RANGE
119
130
return range ? string_type (boost::begin (range), boost::end (range))
120
131
: string_type ();
121
132
}
122
133
123
134
string_type host () const {
124
135
const_range_type range = host_range ();
136
+ CATCH_EMPTY_ITERATOR_RANGE
125
137
return range ? string_type (boost::begin (range), boost::end (range))
126
138
: string_type ();
127
139
}
128
140
129
141
string_type port () const {
130
142
const_range_type range = port_range ();
143
+ CATCH_EMPTY_ITERATOR_RANGE
131
144
return range ? string_type (boost::begin (range), boost::end (range))
132
145
: string_type ();
133
146
}
134
147
135
148
string_type path () const {
136
149
const_range_type range = path_range ();
150
+ CATCH_EMPTY_ITERATOR_RANGE
137
151
return range ? string_type (boost::begin (range), boost::end (range))
138
152
: string_type ();
139
153
}
140
154
141
155
string_type query () const {
142
156
const_range_type range = query_range ();
157
+ CATCH_EMPTY_ITERATOR_RANGE
143
158
return range ? string_type (boost::begin (range), boost::end (range))
144
159
: string_type ();
145
160
}
146
161
147
162
string_type fragment () const {
148
163
const_range_type range = fragment_range ();
164
+ CATCH_EMPTY_ITERATOR_RANGE
149
165
return range ? string_type (boost::begin (range), boost::end (range))
150
166
: string_type ();
151
167
}
0 commit comments