diff --git a/src/org/jitsi/impl/neomedia/RTPConnectorInputStream.java b/src/org/jitsi/impl/neomedia/RTPConnectorInputStream.java
index 70ff8881456086577d7af2c0a42271fddccfe448..576a750d0340bcb27d940d8a5e6cb2e381d36405 100755
--- a/src/org/jitsi/impl/neomedia/RTPConnectorInputStream.java
+++ b/src/org/jitsi/impl/neomedia/RTPConnectorInputStream.java
@@ -341,7 +341,8 @@ public void run()
                  * If we got extended, the delivery of the packet may have been
                  * canceled.
                  */
-                if ((pkt != null) && (transferHandler != null) && !closed)
+                if ((pkt != null) && (!pkt.isInvalid())
+                        && (transferHandler != null) && !closed)
                     transferHandler.transferData(this);
             }
         }
diff --git a/src/org/jitsi/impl/neomedia/RawPacket.java b/src/org/jitsi/impl/neomedia/RawPacket.java
index db1b51730e9fdf391e27aa379bf1e2cb494c72bd..9a88e8afbc659dba881e85eabdd8d4bcb2b4b7f6 100644
--- a/src/org/jitsi/impl/neomedia/RawPacket.java
+++ b/src/org/jitsi/impl/neomedia/RawPacket.java
@@ -21,6 +21,7 @@
  * @author Bing SU (nova.su@gmail.com)
  * @author Emil Ivov
  * @author Damian Minkov
+ * @author Boris Grozev
  */
 public class RawPacket
 {
@@ -470,7 +471,7 @@ public long[] extractCsrcList()
      */
     public int getPaddingSize()
     {
-        if ((buffer[offset] & 0x4) == 0)
+        if ((buffer[offset] & 0x20) == 0)
             return 0;
         else
             return buffer[offset + length - 1];
@@ -958,4 +959,24 @@ public int getHeaderExtensionType()
         return readUnsignedShortAsInt(
                     offset + FIXED_HEADER_SIZE + getCsrcCount()*4);
     }
+
+    /**
+     * Perform checks on the packet represented by this instance and
+     * return <tt>true</tt> if it is found to be invalid. A return value of
+     * <tt>false</tt> does not necessarily mean that the packet is valid.
+     *
+     * @return <tt>true</tt> if the RTP/RTCP packet represented by this
+     * instance is found to be invalid, <tt>false</tt> otherwise.
+     */
+    public boolean isInvalid()
+    {
+        if (buffer == null)
+            return true;
+        if (buffer.length < offset + length)
+            return true;
+        if (length < FIXED_HEADER_SIZE || length < getHeaderLength())
+            return true;
+
+        return false;
+    }
 }
diff --git a/src/org/jitsi/impl/neomedia/transform/TransformUDPInputStream.java b/src/org/jitsi/impl/neomedia/transform/TransformUDPInputStream.java
index e1ab8c4666673c6a85c3cb5284237a5eb77fc5db..90614d6282d169774dc4eacc80199c484fe62c20 100644
--- a/src/org/jitsi/impl/neomedia/transform/TransformUDPInputStream.java
+++ b/src/org/jitsi/impl/neomedia/transform/TransformUDPInputStream.java
@@ -62,6 +62,10 @@ protected RawPacket createRawPacket(DatagramPacket datagramPacket)
         PacketTransformer transformer = getTransformer();
         RawPacket pkt = super.createRawPacket(datagramPacket);
 
+        /* Don't try to transform invalid packets */
+        if (pkt.isInvalid())
+            return pkt;
+
         return (transformer == null) ? pkt : transformer.reverseTransform(pkt);
     }