@@ -628,6 +628,7 @@ CabinetOpen(
628
628
OBJECT_ATTRIBUTES ObjectAttributes ;
629
629
IO_STATUS_BLOCK IoStatusBlock ;
630
630
UNICODE_STRING FileName ;
631
+ USHORT StringLength ;
631
632
NTSTATUS NtStatus ;
632
633
633
634
if (CabinetContext -> FileOpen )
@@ -732,11 +733,14 @@ CabinetOpen(
732
733
the same directory as the current */
733
734
wcscpy (CabinetContext -> CabinetPrev , CabinetContext -> CabinetName );
734
735
RemoveFileName (CabinetContext -> CabinetPrev );
735
- CabinetNormalizePath (CabinetContext -> CabinetPrev , 256 );
736
+ CabinetNormalizePath (CabinetContext -> CabinetPrev , sizeof ( CabinetContext -> CabinetPrev ) );
736
737
RtlInitAnsiString (& astring , (LPSTR )Buffer );
737
- ustring .Length = wcslen (CabinetContext -> CabinetPrev );
738
- ustring .Buffer = CabinetContext -> CabinetPrev + ustring .Length ;
739
- ustring .MaximumLength = sizeof (CabinetContext -> CabinetPrev ) - ustring .Length ;
738
+
739
+ /* Initialize ustring with the remaining buffer */
740
+ StringLength = (USHORT )wcslen (CabinetContext -> CabinetPrev ) * sizeof (WCHAR );
741
+ ustring .Buffer = CabinetContext -> CabinetPrev + StringLength ;
742
+ ustring .MaximumLength = sizeof (CabinetContext -> CabinetPrev ) - StringLength ;
743
+ ustring .Length = 0 ;
740
744
RtlAnsiStringToUnicodeString (& ustring , & astring , FALSE);
741
745
Buffer += astring .Length + 1 ;
742
746
@@ -762,9 +766,12 @@ CabinetOpen(
762
766
RemoveFileName (CabinetContext -> CabinetNext );
763
767
CabinetNormalizePath (CabinetContext -> CabinetNext , 256 );
764
768
RtlInitAnsiString (& astring , (LPSTR )Buffer );
765
- ustring .Length = wcslen (CabinetContext -> CabinetNext );
766
- ustring .Buffer = CabinetContext -> CabinetNext + ustring .Length ;
767
- ustring .MaximumLength = sizeof (CabinetContext -> CabinetNext ) - ustring .Length ;
769
+
770
+ /* Initialize ustring with the remaining buffer */
771
+ StringLength = (USHORT )wcslen (CabinetContext -> CabinetNext ) * sizeof (WCHAR );
772
+ ustring .Buffer = CabinetContext -> CabinetNext + StringLength ;
773
+ ustring .MaximumLength = sizeof (CabinetContext -> CabinetNext ) - StringLength ;
774
+ ustring .Length = 0 ;
768
775
RtlAnsiStringToUnicodeString (& ustring , & astring , FALSE);
769
776
Buffer += astring .Length + 1 ;
770
777
0 commit comments