Skip to content

Commit

Permalink
Fix 7z
Browse files Browse the repository at this point in the history
  • Loading branch information
diev committed Jan 15, 2020
1 parent 84168a9 commit bd1df3e
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 9 deletions.
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,11 @@
### 6.9
Обмен ЭС с ФОИВ.

#### 6.9.1 (2020-01-15): Fix 7z
- Исправление невозможности новых версий `7z.exe` распаковать файлы с
подписью PKCS\#7.
- Добавление возможности обработки файлов с подписью PKCS\#7 с размерами
более 16.7 Мб (до 4 Гб).
#### 6.9.0 (2019-12-23): Add FOIV
- Добавление особенностей обмена с *Федеральными органами исполнительной
власти (ФОИВ)* - теперь только СКАД *Сигнатура* (СКЗИ *Верба-OW* ушла на
Expand Down
36 changes: 27 additions & 9 deletions PTK_PSD_Browser/PTK_PSD_Browser.hta
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
scroll="no"
contextMenu="no"
singleinstance="no"
version="6.9.0"
version="6.9.1"
author="mozers™, mozers*mail.ru"
coauthor="Dmitrii Evdokimov, diev*mail.ru (this version)"
update="http://diev.github.io/PTK-PSD-Browser-hta"
Expand Down Expand Up @@ -212,14 +212,18 @@ function GetTextFromPKCS7(s) {
if (pos < 0) {
return;
} // если найдено, то
// смещаемся на конец oid.length за байт A0 и читаем байт длины (или 81, или 82, или 83 могут быть)
// смещаемся на конец oid.length за байт A0 и читаем байт длины (или 81, или 82, или 83 и далее могут быть)
var b = s.charCodeAt(pos += 12);
if (b === 1027) { // если 0x81: средний файл - пропускаем еще 1 байт
if (b === 1027) { // если 0x81 (129..255) - пропускаем еще 1 байт
pos++;
} else if (b === 8218) { // если 0x82: большой файл - пропускаем еще 2 байта
} else if (b === 8218) { // если 0x82 (256..64К) - пропускаем еще 2 байта
pos += 2;
} else if (b === 1107) { // если 0x83: огромный файл - пропускаем еще 3 байта
} else if (b === 1107) { // если 0x83 (64К..16М) - пропускаем еще 3 байта
pos += 3;
} else if (b === 8222) { // если 0x84 (16М..4Г) - пропускаем еще 4 байта
pos += 4;
} else { // (или 1..128, или же невероятные 4Г+ при 0x85 и т.д.)
// return;
}

pos++;
Expand All @@ -230,18 +234,29 @@ function GetTextFromPKCS7(s) {

var len = 0;
b = s.charCodeAt(pos++);
if (b === 1027) { // если 0x81: средний файл - читаем другой 1 байт
if (b === 1027) { // если 0x81 - читаем другой 1 байт
len = s.charCode1251(pos++);
} else if (b === 8218) { // если 0x82: большой файл - читаем в 2 байтах
} else if (b === 8218) { // если 0x82 - читаем в 2 байтах
len = s.charCode1251(pos++) * 256 + s.charCode1251(pos++);
} else if (b === 1107) { // если 0x83: огромный файл - читаем в 3 байтах
} else if (b === 1107) { // если 0x83 - читаем в 3 байтах
len = s.charCode1251(pos++) * 65536 + s.charCode1251(pos++) * 256 + s.charCode1251(pos++);
} else { // читаем байт длины (или 0x81, или 0x82 могут быть)
} else if (b === 8222) { // если 0x84 - читаем в 4 байтах
len = s.charCode1251(pos++) * 16777216 + s.charCode1251(pos++) * 65536 + s.charCode1251(pos++) * 256 + s.charCode1251(pos++);
} else { // читаем байт длины (если менее 0x81, а вот с 4Г+ будет баг)
len = s.charCode1251(pos - 1);
} // от этой позиции читаем искомый текст вычисленной длины
return s.substr(pos, len);
}

// Возвращает данные в файле, удаляя PKCS #7 подпись
function GetFileFromPKCS7(filename) {
var s = ReadFile(filename);
var data = GetTextFromPKCS7(s);
if (data) {
SaveFile(filename, data);
}
}

// Вывод всплывающего окна с сообщением pText
function Popup(pText) {
var hhControl = new ActiveXObject('Internet.HHCtrl.1');
Expand Down Expand Up @@ -502,6 +517,9 @@ function UnpackerVer(unpacker) {
// Возвращает массив со списком имен распакованных файлов
function Unpack(filepath) {
var log = FSO.BuildPath(INI.temp, FSO.GetTempName());
if (!/\.\d{6}$/i.test(filepath)) {
GetFileFromPKCS7(filepath);
}
var cmd = INI.unpacker_cmd + ' "{0}") > "{1}" 2<&1'.format(filepath, log);
var err = WshShell.Run(cmd, 0, true);
if (err !== 0) {
Expand Down

0 comments on commit bd1df3e

Please sign in to comment.