精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

國(guó)外開(kāi)發(fā)者:檢驗(yàn)并恢復(fù)損壞的git數(shù)據(jù)文件

開(kāi)發(fā) 前端
最近我提交了一分損壞的文件到資源庫(kù)上,被問(wèn)到數(shù)據(jù)是否可恢復(fù)。根據(jù)提出的描述開(kāi)始著手調(diào)查和修復(fù)問(wèn)題,我認(rèn)為其他人也會(huì)對(duì)解決的過(guò)程感興趣,或者遇到相同狀況后可以幫助到你。

最近我提交了一分損壞的文件到資源庫(kù)上,被問(wèn)到數(shù)據(jù)是否可恢復(fù)。根據(jù)提出的描述開(kāi)始著手調(diào)查和修復(fù)問(wèn)題,我認(rèn)為其他人也會(huì)對(duì)解決的過(guò)程感興趣,或者遇到相同狀況后可以幫助到你。

我開(kāi)啟了檢查(fsck),發(fā)現(xiàn)問(wèn)題出現(xiàn)在一個(gè)類上(我過(guò)去經(jīng)常用 $pack $obj 命令使得輸出可讀,而且因?yàn)槲乙哺鼉A向于他們):

  1. $ git fsck 
  2. error: $pack SHA1 checksum mismatch 
  3. error: index CRC mismatch for object $obj from $pack at offset 51653873 
  4. error: inflate: data stream error (incorrect data check) 
  5. error: cannot unpack $obj from $pack at offset 51653873 

錯(cuò)誤的信息意味著一個(gè)字節(jié)在某一個(gè)地方混亂了,推測(cè)是類里面描述過(guò)的(因?yàn)闄z驗(yàn)和的索引和zlib都失敗了)

通過(guò)閱讀zlib源代碼,我發(fā)現(xiàn)“檢查不正確數(shù)據(jù)”意味著adler-32

算法檢驗(yàn)zlib數(shù)據(jù)末端沒(méi)有匹配已經(jīng)增加的數(shù)據(jù)。因此通過(guò)zlib壓縮數(shù)據(jù)是沒(méi)有用的,因?yàn)榈矫看文┪捕紩?huì)有錯(cuò)誤,此時(shí)我們了也解到這個(gè)crc文件不能匹配。這個(gè)出錯(cuò)的字節(jié)存在類文件的任何地方。

第一件事情我從packfilepull出損壞的文件。我需要知道到底它多大的類,然后我發(fā)現(xiàn)了下面的信息:

  1. $ git show-index <$idx | cut -d' ' -f1 | sort -n | grep -A1 51653873 
  2.   
  3. 51653873 
  4. 51664736 

Show-index命令可以列出類和他們的偏移量。我們除了偏移量以外通通拋棄,然后排列,這樣我們感興趣的偏移量(這個(gè)位置是從上面fsck命令得出來(lái)的)是遵循下一個(gè)對(duì)象的偏移量。現(xiàn)在我們知道類文件長(zhǎng)度是10863字節(jié),然后我們可以抓取它:

  1. dd if=$pack of=object bs=1 skip=51653873 count=10863 

我檢查了文件的十六進(jìn)制,搜索任何明顯的錯(cuò)誤(例如,一個(gè)4K大小運(yùn)行中的0是文件系統(tǒng)沖突很好的信號(hào))。但是所有的地方看起來(lái)都很合理。

注意到“object”文件不適合被zlib直接壓縮;它本身包含git類信息頭,而且是可變長(zhǎng)度的。我們想要去掉它,所以開(kāi)始直接使用zlib操 作數(shù)據(jù)。你可以用你手工的方式(格式化信息的描述在Documentation/technical/pack-format.txt里面),或者你也可 以用debugger搞定它。我選擇了后者,創(chuàng)建了一個(gè)驗(yàn)證的包如下:# pack magic and version

  1. # pack magic and version 
  2. printf 'PACK\0\0\0\2' >tmp.pack 
  3. # pack has one object 
  4. printf '\0\0\0\1' >>tmp.pack 
  5. # now add our object data 
  6. cat object >>tmp.pack 
  7. # and then append the pack trailer 
  8. /path/to/git.git/test-sha1 -b <tmp.pack >trailer 
  9. cat trailer >>tmp.pack 

然后在debugger中運(yùn)行”git index-pack tmp.pack” 命令(會(huì)停在unpack_raw_entry)。做到這里,我發(fā)現(xiàn)有3個(gè)自己的信息頭(信息頭本身有一個(gè)完整的類型和大小)。然后我用下面語(yǔ)句去掉了這些內(nèi)容:

  1. dd if=object of=zlib bs=1 skip=3 

我用一個(gè)自定義的C程序過(guò)的zlib的解壓鎖結(jié)果。但是它報(bào)錯(cuò)了,我得到準(zhǔn)確的輸出數(shù)字字節(jié)(也就是說(shuō),它匹配了上面解碼的git的信息頭大小)。 但是”git hash-object” 命令的結(jié)果并沒(méi)有相同的shal值。所以現(xiàn)在仍然有一些錯(cuò)誤的字節(jié)是我不知道的。這個(gè)文件發(fā)生在C源程序代碼, 我希望我能注意到一些明顯的錯(cuò)誤,但是我沒(méi)有成功,我甚至都編譯成功了!

我也試過(guò)和在資源庫(kù)相同路徑下其他版本的文件作比較,希望有不一樣和不合理的部分。不幸運(yùn)的是,這碰巧是唯一的修訂文件,在這個(gè)資源庫(kù)中。所以我沒(méi)有任何東西可以作比較。

于是我采取不同的措施,猜測(cè)著沖突是由限制單個(gè)字節(jié)引起的,我寫了交換每個(gè)字節(jié)的程序,是這解壓縮得到結(jié)果。因?yàn)檫@個(gè)類文件壓縮過(guò)后僅有10K,花了很多時(shí)間解壓出之后的結(jié)果是2.5M。

這是我用的程序:

  1. #include <stdio.h> 
  2. #include <unistd.h> 
  3. #include <string.h> 
  4. #include <signal.h> 
  5. #include <zlib.h> 
  6.   
  7. static int try_zlib(unsigned char *buf, int len) 
  8.   /* make this absurdly large so we don't have to loop */ 
  9.   static unsigned char out[1024*1024]; 
  10.   z_stream z; 
  11.   int ret; 
  12.   
  13.   memset(&z, 0, sizeof(z)); 
  14.   inflateInit(&z); 
  15.   
  16.   z.next_in = buf
  17.   z.avail_in = len
  18.   z.next_out = out; 
  19.   z.avail_out = sizeof(out); 
  20.   
  21.   ret = inflate(&z, 0); 
  22.   inflateEnd(&z); 
  23.   return ret >= 0; 
  24.   
  25. /* eye candy */ 
  26. static int counter = 0
  27. static void progress(int sig) 
  28.   fprintf(stderr, "\r%d", counter); 
  29.   alarm(1); 
  30.   
  31. int main(void) 
  32.   /* oversized so we can read the whole buffer in */ 
  33.   unsigned char buf[1024*1024]; 
  34.   int len; 
  35.   unsigned i, j; 
  36.   
  37.   signal(SIGALRM, progress); 
  38.   alarm(1); 
  39.   
  40.   len = read(0, buf, sizeof(buf)); 
  41.   for (i = 0; i < len; i++) { 
  42.     unsigned char c = buf[i]; 
  43.     for (j = 0; j <= 0xff; j++) { 
  44.       buf[i] = j; 
  45.   
  46.       counter++; 
  47.       if (try_zlib(buf, len)) 
  48.         printf("i=%d, j=%x\n", i, j); 
  49.     } 
  50.     buf[i] = c; 
  51.   } 
  52.   
  53.   alarm(0); 
  54.   fprintf(stderr, "\n"); 
  55.   return 0; 

編譯和運(yùn)行的結(jié)果:

  1. gcc -Wall -Werror -O3 munge.c -o munge -lz 
  2. ./munge <zlib 

有一些錯(cuò)誤出現(xiàn)(如果你在zlib的信息頭中得到”no data”信息,zlib認(rèn)為它運(yùn)行的很好:))。但是我中途得到了下面的信息:

  1. i=5642j=c7 

等到運(yùn)行完結(jié)束,末尾獲得了更多的記錄(整理crc文件匹配了我們損壞的文件)。有一個(gè)很好的機(jī)會(huì),在中間的記錄,就是源代碼的問(wèn)題

在一個(gè)十六進(jìn)制編輯器中對(duì)字節(jié)稍微做了一些調(diào)整,zlib解壓縮(毫無(wú)錯(cuò)誤!),然后管道輸出”git hash-object”,報(bào)告了損壞文件的shal值,成功了!

我修正packfile文件本身:

  1. chmod +w $pack 
  2. printf '\xc7' | dd of=$pack bs=1 seek=51659518 conv=notrunc 
  3. chmod -w $pack 

發(fā)現(xiàn)’\xc7′來(lái)自與替換我們的“munge”程序。把原來(lái)的對(duì)象偏移(51653873)導(dǎo)出了偏移量51659518 。通過(guò)“munge”(5642)增加了代替部分的偏移量,然后增加了之前去掉的3字節(jié)的git信息頭。

最后,”git fsck” 清理干凈。

關(guān)于沖突本身來(lái)說(shuō),我很幸運(yùn)它確實(shí)是一個(gè)字節(jié)。實(shí)際上,證明就是單獨(dú)的位。0xc7字節(jié)發(fā)生沖突成為0xc5.所以推測(cè)由錯(cuò)誤的硬件引起,或者物理射線。

緊接著,中止關(guān)注于解壓縮的輸出是錯(cuò)的嗎?我本會(huì)一直看前面的部分這樣永遠(yuǎn)不會(huì)發(fā)現(xiàn)它。下面是解壓縮后沖突數(shù)據(jù)的不同,真正的數(shù)據(jù)文件:

  1. -       cp = strtok (arg, "+"); 
  2. +       cp = strtok (arg, "."); 

調(diào)整了一個(gè)字節(jié),最終仍然是有效的,可讀的C碰巧做了完全不同的事情!一次不同嘗試會(huì)造成幸運(yùn)的日子,看看zlib的輸出可能確實(shí)有用,正如大多數(shù)隨機(jī)的改變也許就會(huì)破壞C代碼。

但更重要的是,git的hash、檢驗(yàn)和引起了在另外一個(gè)系統(tǒng)中,很容易不被檢測(cè)問(wèn)題。這個(gè)結(jié)果仍然會(huì)編譯,但是可能就引起一個(gè)有趣的bug(歸咎于一些隨機(jī)性的提交)

原文鏈接:http://thread.gmane.org/gmane.comp.version-control.git/236238

譯文鏈接:http://blog.jobbole.com/50108/

責(zé)任編輯:陳四芳 來(lái)源: 伯樂(lè)在線
相關(guān)推薦

2014-06-04 09:21:07

Swift開(kāi)發(fā)語(yǔ)言

2011-08-29 16:41:14

OracleRMAN恢復(fù)數(shù)據(jù)文件的恢復(fù)

2012-06-13 01:23:30

開(kāi)發(fā)者程序員

2024-03-07 08:55:24

JavaPython

2011-03-22 16:20:19

恢復(fù)數(shù)據(jù)庫(kù)

2010-02-03 09:06:26

Java EE 6

2023-07-07 08:15:18

JavaPython編寫

2015-09-08 09:55:28

手游設(shè)計(jì)資源

2011-11-28 13:33:41

iOS

2009-06-30 10:40:28

Linux

2009-07-02 19:07:25

Linux

2014-06-04 11:25:39

Swift蘋果iOS

2020-12-02 10:02:01

MacLinux蘋果

2011-05-17 11:33:43

oracle數(shù)據(jù)庫(kù)

2013-08-07 10:04:37

MySQL數(shù)據(jù)恢復(fù)

2017-04-01 18:00:08

開(kāi)發(fā)者數(shù)據(jù)庫(kù)

2013-11-07 11:23:13

2020-11-18 14:24:38

GitHubyoutube-dl庫(kù)開(kāi)源

2010-05-06 09:42:28

Oracle表空間

2012-01-04 09:18:32

iPhone開(kāi)發(fā)者聯(lián)盟iDP中國(guó)開(kāi)發(fā)者
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

久久精品高清| 伊人久久大香线蕉精品| 成人av毛片在线观看| 97视频在线观看网站| 国产精品456露脸| 国产成人精品电影| 欧美又粗又大又长| jiujiure精品视频播放| 欧美白人最猛性xxxxx69交| 免费午夜视频在线观看| 手机在线免费av| 日本一区二区视频在线观看| 国产精品免费看一区二区三区| 亚洲天堂999| 午夜一区不卡| 欧美激情精品久久久久久黑人| 色噜噜噜噜噜噜| 亚洲福利天堂| 欧美精品一区二区三区久久久| 五月天中文字幕在线| 亚洲人成午夜免电影费观看| 一区二区三区中文免费| 亚洲精品日韩成人| 九色在线播放| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 国产精品久久久久久久久久| 亚洲巨乳在线观看| 丰满少妇被猛烈进入| 麻豆视频观看网址久久| 全球成人中文在线| 国产a∨精品一区二区三区仙踪林| 亚洲国产精品91| 中文字幕亚洲无线码a| 人妻精品久久久久中文字幕| 女仆av观看一区| 亚洲精品一区二区在线观看| 亚洲av综合色区无码另类小说| 性欧美video另类hd尤物| 欧美系列一区二区| 亚洲xxxx2d动漫1| gogo亚洲高清大胆美女人体| 色中色一区二区| 91传媒久久久| 五月天av在线| 色哟哟日韩精品| 精品久久一二三| 英国三级经典在线观看| 精品日韩视频在线观看| 国产老熟妇精品观看| 美女高潮视频在线看| 黄色精品一区二区| 日本中文字幕网址| 亚洲性受xxx喷奶水| 一本色道综合亚洲| 九热视频在线观看| 日本精品久久| 日韩欧美一二三| zjzjzjzjzj亚洲女人| 美腿丝袜亚洲图片| 精品一区二区亚洲| 国产人妻大战黑人20p| 日韩电影一区| 美女精品视频一区| 亚洲一区二区91| 国产午夜精品一区二区三区欧美 | 国产午夜精品无码| 亚洲深夜影院| 国产精品久久久久aaaa九色| 91女人18毛片水多国产| 国产成人精品影视| 久久久99爱| av成人手机在线| 曰韩精品一区二区| 欧美日韩在线不卡视频| 福利一区二区三区视频在线观看| 91精品国产综合久久精品 | 北条麻妃一区二区三区在线| 亚洲精品国精品久久99热一| 欧洲美熟女乱又伦| 欧美激情一级片一区二区| 久久免费视频网站| 波多野结衣在线电影| 国产一区视频导航| 国精产品一区二区| 香蕉视频在线看| 午夜久久久久久| 国产精品久久久毛片| 伊人久久亚洲| 国产亚洲美女久久| 欧美人妻精品一区二区三区| 久久一综合视频| 91在线无精精品一区二区| 日韩福利一区二区| 亚洲人成精品久久久久久| 国产精品沙发午睡系列| 中文字幕成人| 亚洲精选在线观看| 欧美精品videos极品| 玖玖玖国产精品| 懂色av一区二区三区在线播放| 亚洲欧美丝袜中文综合| 亚洲免费av在线| 成人免费无码av| 国产成人澳门| 久久影院模特热| 看黄色一级大片| av电影在线观看完整版一区二区| 在线成人性视频| 欧美大片1688| 亚洲精品久久久久久久久久久| 日本少妇aaa| 肉丝袜脚交视频一区二区| 成人资源av| 成人video亚洲精品| 91福利国产成人精品照片| 国产成人av无码精品| 中文字幕日韩欧美精品高清在线| 国产精品电影观看| 台湾av在线二三区观看| 亚洲成人精品影院| 又黄又爽又色的视频| 色喇叭免费久久综合| 日本高清不卡的在线| 日韩一级片免费看| 一区二区三区**美女毛片| 久久人人爽av| 日韩在线视屏| 国产极品jizzhd欧美| 日本在线视频1区| 亚洲成人动漫精品| 久久久久久久穴| 欧美日韩亚洲一区三区| 91网在线免费观看| 日本在线视频观看| 欧美无乱码久久久免费午夜一区| 少妇真人直播免费视频| 噜噜噜在线观看免费视频日韩 | 黄色亚洲精品| 91入口在线观看| 日本乱理伦在线| 日韩精品综合一本久道在线视频| 美国黄色小视频| 国产精品一区二区在线观看网站| 中文字幕欧美日韩一区二区| 亚洲欧洲日韩精品在线| 欧美成在线视频| www.日日夜夜| 天天综合天天做天天综合| 北京富婆泄欲对白| 亚洲欧美日韩国产一区二区| 欧美日韩精品免费看| 香蕉久久免费电影| 自拍视频国产精品| 国产精品怡红院| 一区二区成人在线| 亚洲精品国产成人av在线| 国产色综合网| 无码免费一区二区三区免费播放| 成人在线视频免费| 久久成人精品视频| 日韩中文字幕观看| 欧美性猛交99久久久久99按摩| av网站免费在线看| 精品综合免费视频观看| 好吊色视频988gao在线观看| 久久这里只有精品一区二区| 欧美在线亚洲一区| 欧美黑人激情| 精品盗摄一区二区三区| 五月激情六月丁香| 国产精品你懂的| 国产精品日日摸夜夜爽| 亚洲影院一区| 亚洲一区免费看| 国产亚洲成av人片在线观黄桃| 日本精品性网站在线观看| 麻豆视频在线观看免费| 精品国产一区二区在线观看| 中文字幕一区在线播放| 亚洲欧洲av在线| youjizz.com日本| 日韩精品电影一区亚洲| 日本a在线天堂| 真实原创一区二区影院| 亚洲一区二区久久久久久| 蜜桃视频在线观看播放| 日韩在线视频免费观看| 色偷偷在线观看| 欧美日韩在线免费视频| 日韩av一二三区| 国产精品乱码久久久久久| 国产污在线观看| 免费看黄色91| 精品少妇一区二区三区在线| 国产精品久久久久一区二区三区厕所| 九9re精品视频在线观看re6 | 精品在线视频一区二区| japansex久久高清精品| 亲子乱一区二区三区电影| 国产成人无吗| 一个色综合导航| 天天色综合av| 欧美一级在线观看| 亚洲中文无码av在线| 亚洲成年人影院| 免费在线观看黄色小视频| 2024国产精品视频| 亚洲成人激情小说| 麻豆成人免费电影| 欧美 国产 小说 另类| 亚洲一级影院| 在线观看国产一区| 日韩一区亚洲二区| 欧美日韩一区二区三区在线视频 | 91丝袜美腿高跟国产极品老师| 色18美女社区| 蜜桃视频一区二区三区在线观看| 日本不卡在线观看视频| 亚洲精品欧洲| 欧美性潮喷xxxxx免费视频看| 色婷婷一区二区三区| 欧美亚洲爱爱另类综合| 欧美一级三级| 精品乱色一区二区中文字幕| 波多野结衣欧美| 成人性教育视频在线观看| xxxxx.日韩| 国产精品免费久久久久久| 日韩免费电影| 国产成人精品日本亚洲| 伊人久久在线| 欧洲成人午夜免费大片| 中文av在线全新| 97在线观看免费| 日韩电影免费看| 欧美一区深夜视频| 在线男人天堂| 国产suv精品一区二区| 国产 日韩 欧美一区| 国产91在线播放| av成人免费看| 国产美女精品视频| www欧美在线观看| 91中文在线视频| 成人在线视频你懂的| 国产精品久久一区二区三区| 久久久久久久久久久久久久久久久久久久| 波多野结衣久草一区| 国产91精品入| 久久大香伊蕉在人线观看热2| 亚洲男人都懂第一日本| 日韩精品欧美专区| 欧洲乱码伦视频免费| 老司机av福利| 欧美精品1区| 91猫先生在线| 蜜桃av一区二区| 波多野结衣电影免费观看| 高清国产一区二区| 中文字幕5566| 日本一二三四高清不卡| 天天操天天操天天操天天操天天操| 亚洲免费av在线| 日产精品久久久久| 日本精品视频一区二区| 一女二男一黄一片| 日韩欧美成人激情| 色鬼7777久久| 日韩一二三在线视频播| 免费av不卡在线观看| 青青在线视频一区二区三区| 国产极品一区| 国产精品果冻传媒潘| 欧美人妖在线| 先锋影音男人资源| 国产日韩欧美在线播放不卡| 欧美午夜aaaaaa免费视频| 国产麻豆精品视频| 97伦伦午夜电影理伦片| 亚洲免费在线观看| 免费黄色网址在线| 欧美一区二区三区四区视频| 天天干天天舔天天射| 日韩中文字幕视频| 嗯啊主人调教在线播放视频| 国产精品爽黄69天堂a| aaa国产精品| 亚洲二区自拍| 亚洲高清在线| 中文字幕66页| 久久亚洲二区三区| 亚洲精品成人a8198a| 毛片在线播放网站| 精品国产一区二区三区在线观看| 91麻豆免费在线视频| 26uuu亚洲伊人春色| 亚洲精品无播放器在线播放| 国产精品区一区二区三在线播放 | 日韩视频在线免费播放| 亚洲精品一级| 亚洲免费黄色录像| 久久久久久麻豆| 久久免费精彩视频| 欧美色欧美亚洲另类二区| 五月激情婷婷综合| 欧美高清视频免费观看| 福利精品在线| 欧美日韩精品久久久免费观看| 欧美视频在线观看| 在线观看免费不卡av| 久久精品视频免费观看| 日本少妇久久久| 欧美一区二区成人| 黄色免费在线观看| 国产精品日韩在线| 精品成av人一区二区三区| 内射国产内射夫妻免费频道| 国产剧情一区在线| 日本 欧美 国产| 欧美性猛交一区二区三区精品| 日本亚洲欧美| 97在线视频免费| 91免费精品国偷自产在线在线| 中文字幕精品一区日韩| 免费看欧美美女黄的网站| 亚洲区自拍偷拍| 日韩欧美成人网| 头脑特工队2免费完整版在线观看 头脑特工队2在线播放 | 亚洲综合色激情五月| 日韩一区亚洲二区| 艹b视频在线观看| 国产欧美精品一区二区三区四区| 69亚洲精品久久久蜜桃小说| 日韩精品免费在线| 亚洲黄色中文字幕| 蜜桃成人在线| 天堂成人国产精品一区| 亚洲最大成人综合网| 欧美在线高清视频| 成人全视频高清免费观看| 国产精品久久久一区| 欧美一区二区三| 中文字幕中文在线| 亚洲免费视频中文字幕| 亚洲精品国产精| 久久久久久有精品国产| 欧美综合自拍| 熟女人妇 成熟妇女系列视频| 国产视频一区二区在线观看| 欧美激情一区二区三区免费观看| 一本一道久久a久久精品逆3p| 日本久久一区| 国产乱子伦精品视频| 处破女av一区二区| 天堂网av手机版| 伊人男人综合视频网| 久久女人天堂| 久久久久久久久影视| 成人激情文学综合网| 日韩三级视频在线| 亚洲深夜福利网站| 91精品一久久香蕉国产线看观看| 一本一道久久a久久综合精品 | 先锋亚洲精品| 亚洲最大成人综合网| 欧美一级片在线| 高清在线视频不卡| 欧美日韩一区在线视频| 久久99精品久久久久| 久久久久香蕉视频| 精品性高朝久久久久久久| 欧美日韩卡一| 成人在线国产视频| 国产欧美一二三区| 国产成人三级在线播放| 欧美综合第一页| 国产精品精品| 亚洲av无码一区二区三区网址| 欧洲精品中文字幕| 美女精品导航| 四虎永久国产精品| 国产91精品精华液一区二区三区 | 日韩三级中文字幕| 亚洲黄色免费av| 成年丰满熟妇午夜免费视频| 91老师国产黑色丝袜在线| 91麻豆成人精品国产| 97香蕉超级碰碰久久免费软件 | 麻豆精品av| 中文字幕视频三区| 精品国产户外野外| 老司机午夜在线视频| 免费观看成人高| 国产一区二区精品在线观看| 无码人妻av一区二区三区波多野| 久久成人精品一区二区三区| 精品久久电影| 久久人人爽人人爽人人片| 日韩午夜中文字幕| 草民电影神马电影一区二区|