changeset 16:7dec02710a42

fixed PE signature parsing
author Evgeniy.Koshkin
date Thu, 01 Aug 2013 17:22:34 +0400
parents 37172df1b16e
children af87768a0724
files agent/src/jetbrains/buildServer/symbols/PEDebugType.java server/src/jetbrains/buildServer/symbols/BuildSymbolsIndexProvider.java server/src/jetbrains/buildServer/symbols/DownloadSymbolFilesController.java
diffstat 3 files changed, 35 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/agent/src/jetbrains/buildServer/symbols/PEDebugType.java	Thu Aug 01 17:22:34 2013 +0400
@@ -0,0 +1,28 @@
+package jetbrains.buildServer.symbols;
+
+/**
+ * Windows Portable Executable (PE) debug type
+ * @author Evgeniy.Koshkin
+ */
+public enum PEDebugType {
+  IMAGE_DEBUG_TYPE_UNKNOWN(0),
+  IMAGE_DEBUG_TYPE_COFF(1),
+  IMAGE_DEBUG_TYPE_CODEVIEW(2),
+  IMAGE_DEBUG_TYPE_FPO(3),
+  IMAGE_DEBUG_TYPE_MISC(4);
+
+  private final int myValue;
+
+  PEDebugType(int value) {
+    myValue = value;
+  }
+
+  private int getValue() {
+    return myValue;
+  }
+
+  @Override
+  public String toString() {
+    return String.valueOf(myValue);
+  }
+}
--- a/server/src/jetbrains/buildServer/symbols/BuildSymbolsIndexProvider.java	Wed Jul 31 11:45:40 2013 +0400
+++ b/server/src/jetbrains/buildServer/symbols/BuildSymbolsIndexProvider.java	Thu Aug 01 17:22:34 2013 +0400
@@ -73,7 +73,7 @@
       Map<String, String> result = new HashMap<String, String>();
       for (Object signElementObject : document.getRootElement().getChildren()){
         final Element signElement = (Element) signElementObject;
-        result.put(signElement.getAttributeValue("sign"), signElement.getAttributeValue("file"));
+        result.put(extractGuid(signElement.getAttributeValue("sign")), signElement.getAttributeValue("file"));
       }
       return result;
     } catch (JDOMException e) {
@@ -82,6 +82,10 @@
     }
   }
 
+  private String extractGuid(String sign) {
+    return sign.substring(0, sign.length() - 1); //last symbol is PEDebugType
+  }
+
   private String locateArtifact(SBuild build, final String fileName) {
     final AtomicReference<String> locatedArtifactPath = new AtomicReference<String>(null);
     build.getArtifacts(BuildArtifactsViewMode.VIEW_DEFAULT_WITH_ARCHIVES_CONTENT).iterateArtifacts(new BuildArtifacts.BuildArtifactsProcessor() {
--- a/server/src/jetbrains/buildServer/symbols/DownloadSymbolFilesController.java	Wed Jul 31 11:45:40 2013 +0400
+++ b/server/src/jetbrains/buildServer/symbols/DownloadSymbolFilesController.java	Thu Aug 01 17:22:34 2013 +0400
@@ -58,7 +58,8 @@
     final String valuableUriPart = requestURI.substring(requestURI.indexOf(APP_SYMBOLS) + APP_SYMBOLS.length());
     final int firstDelimiterPosition = valuableUriPart.indexOf('/');
     final String fileName = valuableUriPart.substring(0, firstDelimiterPosition);
-    final String guid = valuableUriPart.substring(firstDelimiterPosition + 1, valuableUriPart.indexOf('/', firstDelimiterPosition + 1));
+    final String signature = valuableUriPart.substring(firstDelimiterPosition + 1, valuableUriPart.indexOf('/', firstDelimiterPosition + 1));
+    final String guid = signature.substring(0, signature.length() - 1); //last symbol is PEDebugType
     LOG.debug(String.format("Symbol file requested. File name: %s. Guid: %s.", fileName, guid));
 
     final BuildArtifact buildArtifact = findArtifact(guid, fileName);