@@ -170,13 +170,12 @@ class RootSignature {
170
170
uint32_t StaticSamplersOffset;
171
171
uint32_t Flags;
172
172
ViewArray<dxbc::RootParameterHeader> ParametersHeaders;
173
- uint32_t ParameterSpaceOffset;
174
- StringRef ParameterSpace;
173
+ StringRef PartData;
175
174
176
175
using param_header_iterator = ViewArray<dxbc::RootParameterHeader>::iterator;
177
176
178
177
public:
179
- RootSignature () {}
178
+ RootSignature (StringRef PD) : PartData(PD ) {}
180
179
181
180
Error parse (StringRef Data);
182
181
uint32_t getVersion () const { return Version; }
@@ -191,23 +190,22 @@ class RootSignature {
191
190
192
191
llvm::Expected<RootParameterView>
193
192
getParameter (const dxbc::RootParameterHeader &Header) const {
194
- assert (ParameterSpaceOffset != 0 &&
195
- " This should be initialized before reading parameters" );
196
- size_t CorrectOffset = Header.ParameterOffset - ParameterSpaceOffset;
197
- StringRef Data;
198
193
size_t DataSize;
199
194
200
195
switch (Header.ParameterType ) {
201
196
case dxbc::RootParameterType::Constants32Bit:
202
197
DataSize = sizeof (dxbc::RootConstants);
203
198
break ;
204
199
}
200
+ auto EndOfSectionByte = getNumStaticSamplers () == 0
201
+ ? PartData.size ()
202
+ : getStaticSamplersOffset ();
205
203
206
- if (CorrectOffset + DataSize > ParameterSpace. size () )
204
+ if (Header. ParameterOffset + DataSize > EndOfSectionByte )
207
205
return parseFailed (" Reading structure out of file bounds" );
208
206
209
- Data = ParameterSpace .substr (CorrectOffset , DataSize);
210
- RootParameterView View = RootParameterView (Header, Data );
207
+ StringRef Buff = PartData .substr (Header. ParameterOffset , DataSize);
208
+ RootParameterView View = RootParameterView (Header, Buff );
211
209
return View;
212
210
}
213
211
};
0 commit comments